在我的C#程序中,当我尝试运行我的一个存储过程时,它给了我一个与排序规则之间的冲突有关的异常。我该如何解决?
错误说明:"无法解决之间的排序规则冲突 " Arabic_CI_AS"和" Latin1_General_CI_AS"在等于操作。"
答案 0 :(得分:2)
SQL Server中的排序规则定义了用于比较和排序字符串的规则集。
100次中的99次此特定错误是跨数据库查询的结果,具有连接或其他条件涉及来自不同数据库中的表的“字符串”列(其中一个通常是tempdb)。
您可以将排序规则指定为查询的一部分,可以是命名查询,也可以是database_default关键字。有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/ms184391.aspx。
请注意,如果存在动态整理列,这实际上将禁用(就此特定查询而言)一个索引。
答案 1 :(得分:1)
创建具有一些nvarchar参数的sp时,我遇到了同样的错误。这些参数在此sp内有条件地修改。以下是导致错误的代码示例:
create procedure a
@name nvarchar(128),
as
if (@name = '')
throw 51000, 'Empty name', 1;
go
这里的解决方案似乎是定义整理(最好的是database_default
):
create procedure a
@name nvarchar(128),
as
if (@name = '' collate database_default)
throw 51000, 'Empty name', 1;
go