如何在SQL中更改存储过程的排序规则?

时间:2016-04-05 11:00:34

标签: c# sql-server stored-procedures collation

在我的C#程序中,当我尝试运行我的一个存储过程时,它给了我一个与排序规则之间的冲突有关的异常。我该如何解决?

  

错误说明:"无法解决之间的排序规则冲突   " Arabic_CI_AS"和" Latin1_General_CI_AS"在等于操作。"

2 个答案:

答案 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