SQLserver: テーブル型をストアドプロシージャの引数に指定する - Fuwafuwa's memorandum

Fuwafuwa's memorandum

Data analysis, development, reading, daily feeling.
MENU

SQLserver: テーブル型をストアドプロシージャの引数に指定する

ストアドプロシージャの引数にテーブル型を指定し
そのテーブルの値を一時テーブルにインサートします。

最終的にインサートするための一時テーブルを作成します。

IF OBJECT_ID('tempdb..#tab') IS NOT NULL
	DROP TABLE #tab

CREATE TABLE #t1
	( name NVARCHAR(10)
	, age INT )
  
ユーザー定義テーブル型でテーブルの構造を定義します。
(データベース>プログラミング>種類>ユーザー定義テーブル型)
CREATE TYPE test_table
  AS TABLE ( name NVARCHAR(256), age INT )
引数のテーブルの値を#tabにインサートするストアドプロシージャを用意します。
(データベース>プログラミング>ストアドプロシージャ)
USE [database_name]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE test_procedure
  @tab test_table READONLY

AS
BEGIN
	SET NOCOUNT ON;

	INSERT INTO #tab
	SELECT * FROM @tab

END
GO
ユーザー定義テーブル型の構造のテーブルを変数として用意し
テーブル変数に値を挿入し、それを引数として上記のストアドプロシージャを実行します。
-- ユーザー定義テーブル型で変数を定義
DECLARE @tab AS test_table

-- 上記の変数に値をインサート
INSERT INTO @tab (name, age)
 VALUES ( 'tanaka', 18)
       ,( 'aoki', 32)

-- ストアドプロシージャの実行
EXEC test_procedure @tab

-- 結果確認
SELECT * FROM #t1

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。