2010-01-19 84 views
2

有沒有辦法使用T-SQL在sql server存儲過程中聲明項目列表,然後遍歷項目?在sql server存儲過程中創建和循環列表

我試圖做這樣的事情:

input_string = 'my dog has fleas.' 
list_remove = 'a', 'e', 'i', 'o', 'u' 

for each item in list remove 
    input_string = replace(input_string, item, '') 
end 

而在最後input_string是 '我的DG HS FLS。'

我知道我們可以在存儲過程中創建一個表。這是做這種事的最好方法嗎?

回答

3

您有幾種選擇。 OMG小馬是其中之一。您也可以使用表變量(@)或臨時表(#)。 @和#之間的主要區別在於@表是一個變量並將信息存儲在內存中,而#表將其存儲在臨時數據庫中(如果兩個或多個sp副本在同一時間)。你會發現如果你的表格比幾十條記錄大,@表格可能會變慢。這是因爲它的存儲方式。請閱讀Stackoverflow的this瞭解更多信息。此外,您可以使用while循環,但如果您計劃在臨時表中有大量列,我將使用遊標,請閱讀msdn article以獲取更多信息。遊標還可以讓你在桌面上輕鬆地來回移動。另外,如果你想讓它們變快,只需使用FAST FORWARD選項,這使得它們大致和SQL中的WHILE循環一樣快。

1

看看Arrays and Lists in SQL Server不知道是什麼版本的SQL Server你所以挑選從BTW適用於您

對於您的問題,頁面的一個你可以做一個更換,更換輸入字符'

2

用途:

DECLARE @input_string NVARCHAR(25) 
DECLARE @ascii INT 

SET @input_string = 'my dog has fleas.' 
SET @ascii = 97 

-- 97, 101, 105, 111, 117 

WHILE @ascii <= 117 
BEGIN 

    SET @input_string = REPLACE(@input_string, CHAR(@ascii), '') 

    SET @ascii = CASE @ascii 
       WHEN 97 THEN 101 
       WHEN 101 THEN 105 
       WHEN 105 THEN 111 
       WHEN 111 THEN 117 
       END 
END 

PRINT @input_string 
相關問題