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

时间:2011-07-06 12:41:44

标签: sql sql-server-2005

我有这个查询,它的工作对我来说很好

SELECT STUFF(
(SELECT ','+SLT_SubListName  FROM sublists where SLT_SubListId in (1,2)  FOR XML PATH('')),1,1,'');

但当我将in参数(1,2)更改为时,从订阅者中选择SBS_SubListId,其中SBS_SubscriberId = 1' 这也返回 1,2

SELECT STUFF(
(SELECT ','+SLT_SubListName  FROM sublists where SLT_SubListId in (select SBS_SubListId from subscriber where SBS_SubscriberId=1
)  FOR XML PATH('')),1,1,'');

它给我的错误是以下

将varchar值'1,2,4,5'转换为数据类型int。

时转换失败

如果有人需要我也可以在这里发布我的表架构。 谢谢

3 个答案:

答案 0 :(得分:0)

您必须先在逗号基础上拆分这些逗号分隔值,然后应用转换。

答案 1 :(得分:0)

我怀疑你的子查询返回的是一个“1,2,4,5”的条目,它不是一个整数。您需要让它返回4行,每行包含其中一行。

如果你这样做 - 显示子查询的结果 - 那么你可能有类型差异。

答案 2 :(得分:0)

由于您的子查询似乎返回了varchar'1,2,4,5',您可以使用CONTAINS尝试查询:

SELECT STUFF(
(SELECT ','+SLT_SubListName  FROM sublists where CONTAINS((select SBS_SubListId from subscriber where SBS_SubscriberId=1), SLT_SubListId 
)  FOR XML PATH('')),1,1,'');

这样它将子查询的结果视为文本。