sql server排序规则冲突问题解决

问题:
在项目数据库开发中,有时咱们编写的脚本,在本机执行是没有问题的,但部署到服务器的时候,却在脚本运行时报错了。报错的中英文错误提示信息分别以下。
中文:没法解决 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.html

根源:
根据博主(微信公众号: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】微信

相关文章
相关标签/搜索