如何更改 SQL 中存储过程的排序规则?
How can I change a Stored Procedure's Collation in SQL?
在我的 C# 程序中,当我尝试 运行 我的一个存储过程时,它给了我一个与排序规则之间的冲突相关的异常。我该如何解决?
Error Description: "Cannot resolve the collation conflict between
"Arabic_CI_AS" and "Latin1_General_CI_AS" in the equal to operation."
SQL 服务器中的排序规则定义了一组用于比较和排序字符串的规则。
100 次中有 99 次此特定错误是跨数据库查询的结果,连接或 where 条件涉及来自不同数据库中的表的 'string' 列(其中一个通常是 tempdb) .
您可以将排序规则指定为查询的一部分,命名排序规则或 database_default 关键字。有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/ms184391.aspx。
请注意,这实际上会禁用(就此特定查询而言)动态整理列上的索引(如果存在的话)。
我在创建具有一些 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
在我的 C# 程序中,当我尝试 运行 我的一个存储过程时,它给了我一个与排序规则之间的冲突相关的异常。我该如何解决?
Error Description: "Cannot resolve the collation conflict between "Arabic_CI_AS" and "Latin1_General_CI_AS" in the equal to operation."
SQL 服务器中的排序规则定义了一组用于比较和排序字符串的规则。
100 次中有 99 次此特定错误是跨数据库查询的结果,连接或 where 条件涉及来自不同数据库中的表的 'string' 列(其中一个通常是 tempdb) .
您可以将排序规则指定为查询的一部分,命名排序规则或 database_default 关键字。有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/ms184391.aspx。
请注意,这实际上会禁用(就此特定查询而言)动态整理列上的索引(如果存在的话)。
我在创建具有一些 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