0
可能重複:
Parameterizing a SQL IN clause?如何寫一個存儲過程在SQL Server中刪除多行2005
我需要從asp.net SQL表刪除多行在一個單一的點擊。如何爲此編寫一個存儲過程?但我應該使用「IN」關鍵字,以便我可以一次刪除多行。如果我創建一個包含帶有「IN」關鍵字的刪除查詢的SP,應採用何種格式傳遞輸入參數?
可能重複:
Parameterizing a SQL IN clause?如何寫一個存儲過程在SQL Server中刪除多行2005
我需要從asp.net SQL表刪除多行在一個單一的點擊。如何爲此編寫一個存儲過程?但我應該使用「IN」關鍵字,以便我可以一次刪除多行。如果我創建一個包含帶有「IN」關鍵字的刪除查詢的SP,應採用何種格式傳遞輸入參數?
感謝您使用特定的SQL版本進行標記!這是非常有用的,因爲這是一個最佳方法來實現最佳性能的一個領域,隨着每個主要的SQL版本的發生都在改變。
在SQL 2000中,典型的方法是傳入一串逗號分隔值(CSV),然後在SQL數據庫中使用UDF將它們解壓縮到表中。
在SQL 2008中,新的熱點是使用表值參數,它可以直接將數據作爲表/記錄集傳遞。使最好的代碼閱讀,並執行最好的。
但是由於您在SQL 2005上,因此無法使用表值參數。所以你最好的選擇是使用XML數據類型。這有利於勝過CSV方法。這裏有一個小例子:
CREATE PROCEDURE [dbo].[uspDeleteEmployee]
@RecordIDs XML
AS
BEGIN
DELETE dbo.Employee
FROM dbo.Employee e
INNER JOIN @RecordIDs.nodes('RecordList/ID') AS x(Item)
ON e.EmployeeID = Item.value('.', 'int')
END
GO
而這裏的XML字符串的一個樣本:
'<RecordList><ID>1</ID><ID>23</ID><ID>78</ID></RecordList>'