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

问题描述 投票:-1回答:2

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

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

c# sql-server stored-procedures collation
2个回答
2
投票

SQL Server中的排序规则定义了用于比较和排序字符串的规则集。

100次中有99次此特定错误是跨数据库查询的结果,具有连接或涉及来自不同数据库中的表的“字符串”列的条件(其中一个通常是tempdb)。

您可以将排序规则指定为查询的一部分,可以是命名查询,也可以是database_default关键字。有关更多信息,请参阅https://msdn.microsoft.com/en-us/library/ms184391.aspx

请注意,这将实际禁用(就此特定查询而言)动态整理列(如果存在)的索引。


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
© www.soinside.com 2019 - 2024. All rights reserved.