たとえば、以下のようなテーブル定義と、
CREATE TABLE [dbo].[TodoItems]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [IsDone] [bit] NOT NULL, CONSTRAINT [PK_TodoItems] PRIMARY KEY CLUSTERED ([Id] ASC) )
以下のようなユーザー定義テーブル型*1、
CREATE TYPE [dbo].[tvpIds] AS TABLE( [Id] [int] NOT NULL )
CREATE TYPE [dbo].[tvpTodoItems] AS TABLE( [Name] [nvarchar](50) NOT NULL, [IsDone] [bit] NOT NULL )
さらに、以下のようなストアドプロシージャを定義します。
CREATE PROCEDURE [dbo].[usp_CreateTodoItems] @Items [dbo].[tvpTodoItems] READONLY AS BEGIN SET NOCOUNT ON; INSERT INTO [dbo].[TodoItems] ([Name], [IsDone]) OUTPUT inserted.[Id], inserted.[Name], inserted.[IsDone] SELECT [Name], [IsDone] FROM @Items; END
CREATE PROCEDURE [dbo].[usp_DeleteTodoItems] @Ids [dbo].[tvpIds] READONLY AS BEGIN SET NOCOUNT ON; DELETE [dbo].[TodoItems] OUTPUT deleted.[Id] WHERE [Id] IN (SELECT [Id] FROM @Ids); END
今回はこの二つのストアドプロシージャをDapperを介して利用する方法を検討します。
*1:すっかり忘れていましたが、PRIMARY KEYとか定義した方が良いと思います