2011-07-06 199 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,''); 

它把從子查詢文本結果的方式。