关于sqlser2008的排序规则冲突 _随手

在一台服务器上的俩个实例关联查询的时候 报:无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。错误信息中很明确, 排序规则不一致导致的。

常见的解决方案

以数据库级别的排序规则为例,一般来说,解决方案有下面几种

  1. 把SQL实例删了重建 ——大多数情况下等于没说
  2. 修改数据库的排序规则 ——参考阿牛兄的这篇文章
  3. 在T-SQL中使用COLLATE DATABASE_DEFAULT来解决冲突 接下来主要讨论这个

Collate XXX 操作可以用在字段定义或使用时,

它会将字段定义或转换成XXX 的排序规则格式。

Collate Database_Default 则会将字段定义或转换成当前数据库的默认排序规则,从而解决冲突。

比如在下面的代码中便使用了Collate Database_Default 来解决字段在equal操作中的排序规则冲突:

select * from   ris_request   r

left join  afilm.dbo.printlist   d on  r.RequisitionID  Collate Database_Default  = d.sheet_id;          

当然,在创建临时表时若对字段定义加上Collate Database_Default ,也可以方便地解决潜在的排序规则冲突,比如上一节中提到的存储过程,只要做如下修改即可。

            CREATE TABLE #TagsTable
            (
                TagName        NVARCHAR(64)    COLLATE DATABASE_DEFAULT
            )

参考:https://www.cnblogs.com/chencidi/archive/2014/07/02/3820386.html



阅读更多
换一批

没有更多推荐了,返回首页