尝试在我的 WHERE 子句中使用 IN 和 varchar 但 运行 进入整理问题

trying to use a IN in my WHERE clause with varchar but running into Collate Issue

我的数据库中现在有两个表。

Table1
ID        Value1    VText2      VText3      
1         1XX1      text1       text1
2         2XX2      text2       text2
3         3XX3      text3       text3


Table2
ID        OtherValue
1         1XX1
2         2XX2

这是我的 tables.In 的简化版

我的目标是:

SELECT * From TABLE1 where Value1 in (SELECT OtherValue from Table2)

当我执行这个时,我 运行 遇到了这个错误:

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

Desired end result:
ID        Value1    VText2      VText3      
1         1XX1      text1       text1
2         2XX2      text2       text2

我相信这是因为我在 "WHERE IN" 子句中使用了 VARCHAR 值。有没有办法用 varchars 做到这一点?

这显然是因为两个表中的排序规则不同。

您可以手动进行转换。不清楚你想要什么,但是是这样的:

WHERE Value1 COLLATE SQL_Latin1_General_CP1_CS_AS IN (SELECT OtherValue from Table2)

通常情况下,同一数据库中的字符串应该具有相同的排序规则。但是,可能有不同的排序规则——这样就会弹出这样的错误 ;)