代码之家  ›  专栏  ›  技术社区  ›  iminiki Shivam Krishna

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

  •  2
  • iminiki Shivam Krishna  · 技术社区  · 8 年前

    在我的C#程序中,当我尝试运行一个存储过程时,它会给我一个与排序规则之间的冲突有关的异常。我怎样才能修复它?

    错误描述:“无法解决 “Arabic_CI_AS”和“Latin1_General_CI_AS”

    2 回复  |  直到 8 年前
        1
  •  2
  •   Dale K    5 年前

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

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

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

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

        2
  •  2
  •   Łukasƨ Fronczyk    7 年前

    我在创建带有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