5つの方法で解説!SQL Serverで一時テーブルにデータを挿入する
SQL Server で一時テーブルにデータ挿入する方法
INSERT INTO ステートメント
最も一般的な方法は、INSERT INTO
ステートメントを使用することです。
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- データを挿入
INSERT INTO #TempTable (ID, Name)
VALUES (1, 'John Doe'),
(2, 'Jane Doe');
-- データを確認
SELECT * FROM #TempTable;
上記のように、INSERT INTO
ステートメントで一時テーブル名を指定し、列名と値のペアを指定してデータを挿入できます。
SELECT INTO
ステートメントを使用すると、別のテーブルからデータをコピーして一時テーブルを作成できます。
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- 別のテーブルからデータをコピー
SELECT ID, Name
INTO #TempTable
FROM dbo.Customers;
-- データを確認
SELECT * FROM #TempTable;
VALUES
コンストラクタを使用すると、直接値を指定して一時テーブルを作成できます。
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- データを挿入
INSERT INTO #TempTable
VALUES (1, 'John Doe'),
(2, 'Jane Doe');
-- データを確認
SELECT * FROM #TempTable;
上記のように、VALUES
コンストラクタで列名と値のペアを直接指定できます。
EXECUTE ステートメント
ストアドプロシージャや動的SQLを使用する場合は、EXECUTE
ステートメントを使用して一時テーブルにデータを挿入できます。
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- ストアドプロシージャを実行
DECLARE @sql nvarchar(max);
SET @sql = 'INSERT INTO #TempTable (ID, Name)
VALUES (@ID, @Name)';
EXEC sp_executesql @sql, N'@ID int, @Name varchar(50)',
@ID = 1, @Name = 'John Doe';
-- データを確認
SELECT * FROM #TempTable;
上記のように、EXECUTE
ステートメントでストアドプロシージャや動的SQLを実行し、一時テーブルにデータを挿入できます。
一時テーブルの注意点
- 一時テーブルはセッションに関連付けられます。つまり、セッションが終了すると一時テーブルは削除されます。
- 一時テーブルはトランザクションログに記録されません。つまり、トランザクションがロールバックされても、一時テーブルのデータは保持されます。
- 一時テーブルは他のユーザーから参照できません。
これらの点に注意して、一時テーブルを活用しましょう。
INSERT INTO ステートメント
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- データを挿入
INSERT INTO #TempTable (ID, Name)
VALUES (1, 'John Doe'),
(2, 'Jane Doe');
-- データを確認
SELECT * FROM #TempTable;
SELECT INTO ステートメント
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- 別のテーブルからデータをコピー
SELECT ID, Name
INTO #TempTable
FROM dbo.Customers;
-- データを確認
SELECT * FROM #TempTable;
VALUES コンストラクタ
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- データを挿入
INSERT INTO #TempTable
VALUES (1, 'John Doe'),
(2, 'Jane Doe');
-- データを確認
SELECT * FROM #TempTable;
EXECUTE ステートメント
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- ストアドプロシージャを実行
DECLARE @sql nvarchar(max);
SET @sql = 'INSERT INTO #TempTable (ID, Name)
VALUES (@ID, @Name)';
EXEC sp_executesql @sql, N'@ID int, @Name varchar(50)',
@ID = 1, @Name = 'John Doe';
-- データを確認
SELECT * FROM #TempTable;
SQL Serverで一時テーブルにデータ挿入するその他の方法
BULK INSERT
概要
BULK INSERT
ステートメントを使用すると、ファイルからデータを高速に挿入できます。
メリット
- 大量のデータを効率的に挿入できる
- データ型変換を自動的に行える
- データファイルの形式が制限される
- トランザクションログに記録されない
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- データファイルを準備
BULK INSERT #TempTable
FROM 'C:\data\temp.txt'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');
-- データを確認
SELECT * FROM #TempTable;
OPENROWSET
OPENROWSET
関数を使用すると、別のデータベースやファイルからデータを直接挿入できます。
- さまざまなデータソースからデータを挿入できる
- 複雑なデータ変換を記述できる
- 処理速度が遅くなる場合がある
- 構文が複雑になる
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- 別のデータベースからデータを挿入
INSERT INTO #TempTable (ID, Name)
SELECT ID, Name
FROM OPENROWSET('SQLNCLI', 'Server=localhost;Database=TestDB;Integrated Security=True', 'SELECT ID, Name FROM dbo.Customers');
-- データを確認
SELECT * FROM #TempTable;
INSERT EXEC
INSERT EXEC
ステートメントを使用すると、ストアドプロシージャの結果を直接挿入できます。
- 複雑なデータ処理をストアドプロシージャに記述できる
- 繰り返し実行する処理をカプセル化できる
-- 一時テーブルを作成
CREATE TABLE #TempTable (
ID int,
Name varchar(50)
);
-- ストアドプロシージャを作成
CREATE PROCEDURE sp_GetCustomers
AS
BEGIN
SELECT ID, Name
FROM dbo.Customers
END;
-- ストアドプロシージャの結果を挿入
INSERT INTO #TempTable (ID, Name)
EXEC sp_GetCustomers;
-- データを確認
SELECT * FROM #TempTable;
SQL Serverで一時テーブルにデータ挿入する方法はいくつかあります。それぞれの方法の特徴を理解して、状況に合わせて最適な方法を選択しましょう。
sql sql-server temp-tables