我已经从本地数据库(MSSQL 2012)创建了.bak文件,并在活动服务器(MSSQL 2012)上还原了它。它正在工作,但有些stored_procedures没有执行,并且正在生成错误:
无法解决操作中"SQL_Latin1_General_CP1_CI_AS“和"Latin1_General_CI_AI”之间的排序冲突。
我不知道这个错误是什么以及如何解决它?
我有数千个stored_procedures.How来解决所有存储过程中的这个问题?
发布于 2016-06-16 11:31:50
此问题可能是“本地”Server和“活动”Server之间排序规则设置的差异,因此数据库和数据库对象使用了错误的排序规则。
在安装开发服务器时,需要密切注意服务器参数(ANSI设置、排序规则等),以确保它们与生产服务器完全匹配。这同样适用于数据库参数。关于排序规则设置如何工作的请看这篇有点古老但仍然相关的文章。。
您可以通过SSMS或运行以下查询(请参阅MSDN)查找当前排序规则设置:
-- Server Collation Setting
SELECT CONVERT (varchar, SERVERPROPERTY('collation'));
-- Database Collation Settings
SELECT name, collation_name FROM sys.databases;
-- Table column Collation Settings
SELECT t.name, c.name AS ColName, *
FROM sys.tables AS t
INNER JOIN sys.columns AS c ON t.object_id = c.object_id
WHERE not collation_name is NULL
ORDER BY t.name, column_id在如何解决此问题时,您有两个选择:
更改数据库和所有对象的排序规则设置
要解决“活动”环境上的这种排序差异,您需要:
最简单的解决方案是使用正确的排序规则设置重新创建数据库中的每个对象(在更改DB排序规则之后)。
修改您的代码
第二个选项是人们在评论中所建议的,即在代码中明确指定排序规则设置“无处不在”。这一选择应作为最后手段或绝对必要时使用(不能想出可能需要的理由)。
其他
更改服务器的排序规则也是可能的,但这并不是一个真正的选择。
https://stackoverflow.com/questions/37856088
复制相似问题