2014-03-03 39 views
0

我可以在sql中使用FOR XML PATH來處理int列嗎? ,這樣我可以用它類似:SQL對於int列上的xml路徑?

declare @contactIds = (select id from contacts) 

,然後用它是這樣的:

select * from calls where contactId in (@contactIds) 

這可能嗎?

+1

你的意思是你想將一組ID存儲在一個變量中,以便稍後在查詢的WHERE子句中使用它?你可以用臨時表來做到這一點。 –

+0

如果@ @ contactIds是一個字符串(如果您使用FOR XML PATH,那麼SQL將不檢查該字符串的內容,找到逗號,然後決定將該* single *字符串視爲它實際上是幾個獨立的*參數到'IN()'我不知道任何語言會這樣做,所以當人們試圖用SQL來做時,我總是感到很驚訝 –

回答

0

這是你想要的嗎?

select @contactIds = stuff((select ','+cast(id as varchar(8000)) 
          from contacts 
          for xml path('') 
          ), 1, 1, ''); 

您也可以直接使用子查詢或表變量:

select * 
from calls 
where contactId in (select id from contacts); 

我的猜測是你的問題比這個問題更復雜,所以這並不能真正解決問題。

+0

我有一個查詢要帶聯繫人姓名和他的撥出電話號碼和來電號碼,所以我使用子查詢,但它需要12秒鐘運行,所以我正在尋找如何改進它... –

+0

有可能有方法來實際改善查詢。會建議你問另外一個問題,提供你實際上在做什麼的信息,你不能在'in'語句中使用@ @ ContactIds'(你可以,它不會做你想做的)。 –