我使用折叠查询更改了测试数据库的排序规则:
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排序规则:
Management studio > Database > properties > options > collation. 是否还有其他选项而不是数据库本身(例如模式)仍然保存旧的排序规则?
发布于 2018-12-23 16:34:36
第一:列的排序规则按每列存储。
第二:ALTER DATABASE ... COLLATE ...语句只更改数据库本身的默认排序规则。它不更改数据库中任何现有列的排序规则。这一变化影响到:
Latin1_General_100_CI_AS_KS_WS_SC)除外。COLLATE子句的新字符串列。新via:CREATE TABLE ...ALTER TABLE ... ADDDECLARE @TableVariable TABLE ... (这些默认为数据库的排序规则,而不是[tempdb]的S排序规则)COLLATE子句(即ALTER TABLE ... ALTER COLUMN ...)的更改后的字符串列COLLATE指定DATABASE_DEFAULT的新列或更改列要深入了解更改数据库级别(甚至实例级)排序规则,请参阅我的文章:
更改所有用户数据库中实例、数据库和所有列的排序规则:什么可能出错?
有关使用排序规则的更多信息,请访问:校对信息
发布于 2018-12-23 16:14:16
检查您正在比较的列的排序规则,您可能会发现在test上,这些列仍然在SQL_Latin1_General_CP1_CI_AS中。尝试在比较中显式地声明排序规则,看看它是否有用。
另外,您是否将某些内容存储在tempdb中?如果您的实例基于其中一个或另一个,则可能会出现此问题。
https://dba.stackexchange.com/questions/225682
复制相似问题