【问题标题】:"SQL_Latin1_General_CP1_CI_AS" in the equal to operation等于操作中的“SQL_Latin1_General_CP1_CI_AS”
【发布时间】:2018-04-15 00:40:14
【问题描述】:

嗨,我是 SQL 查询的新手

我的查询是

ALTER TABLE ValidIBAN NOCHECK CONSTRAINT FK_ValidIBAN_Countries
UPDATE t 
 SET t.CountryID = s.Corrected
from #TempNewCountryID s,Countries t
where 
s.Existing = t.CountryID

但是在运行这个查询之后我得到了

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

错误请指教。

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:

如果您更新表或数据库上的排序规则(如果需要),甚至在服务器中(如果需要),那么您永远不会出现这样的错误。

ALTER TABLE tbl1 CONVERT TO CHARACTER SET utf8mb4 COLLATE SQL_Latin1_General_CP1_CI_AI;

我认为最好在表上更新排序规则,而不是在查询中使用它。

【讨论】:

    【解决方案2】:

    取决于需要哪种逻辑(区分重音或不区分重音),在等号两边使用 COLLATE:WHERE s.Existing COLLATE SQL_Latin1_General_CP1_CI_AI = t.CountryID COLLATE SQL_Latin1_General_CP1_CI_AI

    【讨论】:

    • 有没有办法在语句的顶部使用一次?对我来说,在每个等号中使用它似乎是一个好习惯,因为我需要多次使用它。
    • 不,据我所知,您不能只使用一次:SQL 允许如此多的灵活性(以及不良做法的空间;-)),您可以为每列定义不同的排序规则...
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2023-01-05
    • 2018-10-20
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多