将varchar值'1'转换为数据类型int时转换失败

时间:2010-11-27 09:34:56

标签: sql sql-server sql-server-2005 tsql

我有表类别(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”

的数据

2 个答案:

答案 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引擎会在这种情况下使用索引......