【问题标题】:How can I change a Stored Procedure's Collation in SQL?如何在 SQL 中更改存储过程的排序规则?
【发布时间】:2016-04-05 11:00:34
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

请注意,这实际上会禁用(就这个特定查询而言)动态排序列上的索引(如果存在)。

【讨论】:

    【解决方案2】:

    在创建具有一些 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
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2023-04-04
      • 2018-08-02
      • 1970-01-01
      • 2011-03-28
      相关资源
      最近更新 更多