3

userId と categoryIds のリストを受け取るストアド プロシージャを作成し、一致する行を特定のテーブルから削除する必要があります。

擬似コード:

@categorylist int[]
@userId int

foreach(category as c in @categorylist)
{
DELETE FROM HelpWith as h
WHERE c.categoryId = h.categoryId
AND h.userId = @userId
}

これで、SQL でループを使用することは想定されていないことがわかりました (とにかくこれが機能するわけではありません...) これを実行できるストアド プロシージャを作成する方法を知っている人はいますか?

4

2 に答える 2

4

@Categorylist からテーブル変数を作成する

@Categorylist table (ID int)

DELETE FROM HelpWith 
WHERE categoryId IN (SELECT ID FROM @Categorylist)
AND userId = @userId
于 2013-05-17T08:07:46.287 に答える
3

SQL Server およびバージョン 2008 以降では、テーブル値パラメーターを使用できます

CREATE TYPE Categorylist AS TABLE (ID int);
GO

CREATE PROCEDURE DoStuff
   @userId int,
   @list Categorylist READONLY
AS
...
DELETE FROM HelpWith 
      WHERE categoryId IN (SELECT ID FROM @list)
      AND userId = @userId
...
于 2013-05-17T08:15:42.023 に答える