SQL排序规则冲突

时间:2018-07-03 19:32:57

标签: sql sql-server tsql

在执行如下所示的sql查询时出现排序规则问题:

INSERT INTO (table1) (...)
SELECT (...)
FROM (table 2)
WHERE X NOT IN (SELECT Y from (table1)


Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.

我看到了一个解决方案here,但是当我尝试这样的操作时:

INSERT INTO (table1) (...)
    SELECT (...)
    FROM (table 2)
    WHERE X NOT IN (SELECT Y from (table1) COLLATE database_default

我收到语法错误:

 "Incorrect syntax near the keyword 'COLLATE'."

有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

您应该移动COLLATE

INSERT INTO (table1) (...)
SELECT (...)
FROM (table 2)
WHERE X NOT IN (SELECT Y COLLATE database_default from table1);

请注意,如果NOT IN列可为空,则Y可能会很棘手。通过添加以下代码来保护代码是一种很好的做法:

WHERE X NOT IN(SELECT Y COLLATE database_default from table1 WHERE Y IS NOT NULL);