【问题标题】:collation conflict sql server排序规则冲突sql server
【发布时间】:2012-01-21 23:27:15
【问题描述】:

当我发出 SQL 查询时,有时会收到以下错误消息:

无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

我经常解决这个问题,只是让两个表排序规则相同。所以我想知道有什么快速的方法可以解决这个问题。

我想在我的 SQL 查询中添加 一些特殊的东西,因此如果 sql 查询中两个表的排序规则不同,那么查询也可以完美运行而不会出现任何错误。有什么解决办法吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用COLLATE 子句强制进行排序。

    SELECT *
    FROM Table1 T1
    INNER JOIN Server2.dbo.Table2 T2
    ON T1.Name = T2.Name COLLATE database_default
    

    在连接两个数据库或服务器之间的表时,排序规则冲突很常见,尤其是在数据库版本不同的情况下。

    【讨论】:

      【解决方案2】:

      您可以使用collate clause 在查询中指定排序规则:

      where  col1 = col2 collate Latin1_General_CI_AS
      

      【讨论】:

        【解决方案3】:

        两个服务器可能使用不同的排序规则。如果是,那么您将收到类似于我在本主题顶部提到的错误。在这种情况下你应该怎么做?

        1. 您可以更改任一表列/字段的默认排序规则,但这可能会对当前与更改后的表一起使用的其他表产生连锁反应。

        2. 在匹配列/字段时使用 COLLATE DATABASE_DEFAULT 关键字

        喜欢:

        SELECT T1.EmployeeName, T2.DeptName
        FROM ServerA.dbo.EmpTab T1
        JOIN ServerB.dbo.DeptTab T2
        ON T1.DeptCode COLLATE DATABASE_DEFAULT
        = T2.DeptCode COLLATE DATABASE_DEFAULT
        

        【讨论】:

          猜你喜欢
          • 2010-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-13
          • 2011-04-17
          • 1970-01-01
          相关资源
          最近更新 更多