VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > T-SQL >
  • sql server排序规则冲突问题解决

本站最新发布    SQL Server 2016数据库视频教程
试听地址  
https://www.xin3721.com/eschool/SQLxin3721/

问题:
在项目数据库开发中,有时我们编写的脚本,在本机执行是没有问题的,但部署到服务器的时候,却在脚本运行时报错了。报错的中英文错误提示信息分别如下。
中文:无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。
English:Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.

根源:
根据博主(微信公众号:SQL数据库编程,微信号:zhang502219048)实际工作中遇到的问题,概括为:如果本机是中文操作系统,而服务器是英文操作系统,而且脚本使用了临时表并且没有指定nvarchar或varchar文本字段的排序规则,并在join表连接中关联项目数据库的表(项目数据库默认排序规则为Chinese_PRC_CI_AS)的on关联条件中用到此文本字段,则会出现此问题。

解决方案:
方案1(不推荐)
在join连接的on条件字段中,对临时表指定排序规则。这种方法不推荐,因为如果有10个join临时表的语句,就得写10次,太过于繁琐。

select *
from #t1 a
inner join t2 b 
    on b.name = a.name collate Chinese_PRC_CI_AS

方案2推荐
在临时表的nvarchar或varchar文本字段定义中,增加指定排序规则,一劳永逸,不需要再在join连接的on条件中指定排序规则。

create table #t1
(
    name nvarchar(50) collate Chinese_PRC_CI_AS
)

【转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/12992611.html】

相关教程