尝试在我的 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)
通常情况下,同一数据库中的字符串应该具有相同的排序规则。但是,可能有不同的排序规则——这样就会弹出这样的错误 ;)
我的数据库中现在有两个表。
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)
通常情况下,同一数据库中的字符串应该具有相同的排序规则。但是,可能有不同的排序规则——这样就会弹出这样的错误 ;)