2011-07-06 149 views
0

我有这个查询和它的工作正常,我转换失败

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

但是当我改变在参数(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时转换失败。

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

回答

0

您必须首先在逗号上分割这些逗号分隔值,然后应用收敛。

+0

你是对的,但我想知道为什么我必须这样做? – rahularyansharma

+0

,因为当应用转换时,编译器会将一个元素变成'75'为整数75,所以当它在元素列表中找到','时,它不能将它转换为整数...这就是为什么...... –

0

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

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

0

由于您的子查询似乎返回VARCHAR“1,2,4,5”,你可以尝试使用查询包含:

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,''); 

它把从子查询文本结果的方式。