これは実際に投稿したリンクの複製です。値のリストを解析しようとする代わりに、テーブル値パラメーターを渡します。
最初にデータベースにパラメータの型を作成します (一度だけ)。
CREATE TYPE [dbo].[IdList] AS TABLE(
[Id] int NULL
);
次に、このパラメータを受け入れるプロシージャを作成します:
CREATE PROCEDURE [dbo].[GetWorkspaceMapDetailsForUserByGroups]
@workspaceID int,
@groupIds IdList READONLY
AS
BEGIN
SELECT
m.*
FROM GeoAppMapDef m
inner join @groupIds on [email protected]
WHERE
m.workspaceID = @workspaceID
and m.IsDeleted = 0
END
クライアント側で、Id
という単一の int 型の列を持つ DataTable を作成します。 、必要な ID を入力してから、@groupIds
の値として使用します パラメータ
var table = new DataTable();
table.Columns.Add("Id", typeof(int));
for (int i = 0; i < 10; i++)
table.Rows.Add(i);
var pList = new SqlParameter("@groupIds", SqlDbType.Structured);
pList.TypeName = "dbo.IdList";
pList.Value = table;
いくつかの変更を加えて、重複した質問からこれをコピーしました。