我有表类别(c)和另一个表(x),其中一列可以包含用逗号分隔的cat ID作为varchar数据类型。我想选择相关的类别,但我遇到错误“将varchar值'5'转换为数据类型int时转换失败。”在尝试选择时:
SELECT ID, Title FROM c WHERE ID IN (SELECT catIDs FROM x WHERE ID=any);
子查询返回类似“1,3,4”
的数据答案 0 :(得分:4)
您需要将子查询返回的1,3,4
字符串拆分为单独的int
值。 SQL Server没有内置函数,但您可以使用this user-defined function。
在数据库中创建函数dbo.Split
,然后按如下所示重新编写查询:
SELECT ID, Title
FROM c
WHERE ID IN
(
SELECT s
FROM dbo.Split(',', '1,3,4')
)
我将子查询替换为示例结果1,3,4
,以缩短查询并使其更易于理解。
答案 1 :(得分:1)
如果我做对了,你的列catID中实际上有“1,3,4”这样的值。因此,您应该在选择子查询中提取子字符串。
顺便说一句,我不是MS SQL Server专家,但这可能是一个糟糕的数据库设计。我不确定RDBMS引擎会在这种情况下使用索引......