2013-10-25 62 views
0

我正在使用MS SQL Server 2008,並且我必須更新其中一個表中名稱的長列表。我想傳遞一個名稱列表,並通過給它們添加一個前綴來更新它們。假設我將X,Y,Z傳遞給存儲過程,並將它們更新爲Disable_X,Disable_Y,Disable_Z。在一次調用中更新多個記錄

我認爲表值參數是我正在尋找和我已經閱讀http://www.sommarskog.se/arrays-in-sql-2008.html#TVP_in_TSQL但它只是談論插入多個參數,我想要做的是更新多個記錄,如果他們存在。我剛剛開始學習這些概念,所以有人能指出我正確的方向?

編輯:我想傳遞一個我想要更新到存儲過程的名稱列表。不必多次調用存儲過程,我只想調用一次。

+1

這是不是很清楚你想要什麼。你需要一個帶有字符串(?)或表(?)參數的存儲過程,你不能調用它來更新你的表?或者是一個簡單的'更新...哪裏......'足夠? –

+0

@OcasoProtal對不起,不夠清楚。我想用我想要更新的名稱列表來調用存儲過程。此列表可以作爲TVP或逗號分隔列表或任何其他方式傳遞,無論哪個更容易實現。如果一個簡單的更新,在哪裏組合可以做到這一點也很好。 – user2696565

回答

0

此存儲過程需要一個由逗號分隔名稱組成的字符串。將此字符串轉換爲xml並使用xml functionallity來獲取xml的所有元素的列表。 未經測試:

CREATE PROCEDURE [dbo].[MultiUpdate] 
( 
    @valuelist varchar(MAX) 
) AS 

    DECLARE @xml as xml 

    SET @xml = cast(('<X>'+replace(@valuelist,',' ,'</X><X>')+'</X>') as xml) 

    UPDATE yourtable SET name='DISABLE_'+name Where name in (SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N)) 

    RETURN 
相關問題