首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个数据库时的数据库排序问题

比较两个数据库时的数据库排序问题
EN

Database Administration用户
提问于 2018-12-23 15:45:59
回答 2查看 3.6K关注 0票数 2

我使用折叠查询更改了测试数据库的排序规则:

代码语言:javascript
复制
USE master;  
GO  
ALTER DATABASE test  
COLLATE SQL_Latin1_General_CP1_CI_AI ;  
GO  

--Verify the collation setting.  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'test';  
GO 

现在,当我想将测试数据库的列与test2数据库进行比较时,我会收到以下错误:

无法解决"SQL_Latin1_General_CP1_CI_AI“和"SQL_Latin1_General_CP1_CI_AS”在等效操作中的排序规则冲突。

我检查了两个数据库是否都有SQL_Latin1_General_CP1_CI_AI排序规则:

代码语言:javascript
复制
Management studio > Database > properties > options > collation. 

是否还有其他选项而不是数据库本身(例如模式)仍然保存旧的排序规则?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-12-23 16:34:36

第一:列的排序规则按每列存储。

第二:ALTER DATABASE ... COLLATE ...语句只更改数据库本身的默认排序规则。它不更改数据库中任何现有列的排序规则。这一变化影响到:

  • 数据库级元数据(主要是数据库级对象的名称:表、列、过程、函数、触发器、索引、用户、视图、约束等),但包含的数据库(其中数据库级的元数据总是Latin1_General_100_CI_AS_KS_WS_SC)除外。
  • 不指定COLLATE子句的新字符串列。新via:
    • CREATE TABLE ...
    • ALTER TABLE ... ADD
    • DECLARE @TableVariable TABLE ... (这些默认为数据库的排序规则,而不是[tempdb]的S排序规则)

  • 未指定COLLATE子句(即ALTER TABLE ... ALTER COLUMN ...)的更改后的字符串列
  • 使用COLLATE指定DATABASE_DEFAULT的新列或更改列
  • 字符串文字和变量

要深入了解更改数据库级别(甚至实例级)排序规则,请参阅我的文章:

更改所有用户数据库中实例、数据库和所有列的排序规则:什么可能出错?

有关使用排序规则的更多信息,请访问:校对信息

票数 4
EN

Database Administration用户

发布于 2018-12-23 16:14:16

检查您正在比较的列的排序规则,您可能会发现在test上,这些列仍然在SQL_Latin1_General_CP1_CI_AS中。尝试在比较中显式地声明排序规则,看看它是否有用。

另外,您是否将某些内容存储在tempdb中?如果您的实例基于其中一个或另一个,则可能会出现此问题。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/225682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档