T-SQL:SELECT INTO を使ってテーブル変数にデータ挿入する方法
T-SQL でテーブル変数に挿入する
構文
SELECT column_list
INTO @table_variable
FROM table_name
[WHERE condition];
構文の説明:
column_list
: 挿入する列をカンマ区切りで指定します。@table_variable
: 挿入先のテーブル変数名。@
記号を頭に付けて指定します。table_name
: データを取得するテーブル名。WHERE condition
: 挿入するデータの条件を指定するオプション。
例
以下の例は、Customers
テーブルから CustomerID
、FirstName
、LastName
列を @Customers
というテーブル変数に挿入します。
SELECT CustomerID, FirstName, LastName
INTO @Customers
FROM Customers;
@Customers
テーブル変数には、Customers
テーブルのすべてのデータが格納されます。
WHERE
条件を使用して、挿入するデータを制限することができます。
例えば、以下の例では、Customers
テーブルから Country
列が 'Japan' のデータのみを @Customers
テーブル変数に挿入します。
SELECT CustomerID, FirstName, LastName
INTO @Customers
FROM Customers
WHERE Country = 'Japan';
メリット
- 効率的: SELECT ステートメントの結果を一時テーブルに格納する必要がなく、処理速度が向上します。
- 簡潔: INSERT ステートメントと SELECT ステートメントを別々に記述する必要がなく、コードが簡潔になります。
- 再利用性: テーブル変数は一時的なデータ格納領域としてだけでなく、他のクエリで再利用することができます。
デメリット
- ローカル変数: テーブル変数はローカル変数であり、バッチ処理内でしか使用できません。
- データ量制限: テーブル変数に格納できるデータ量は、サーバーのメモリによって制限されます。
SELECT INTO
は、T-SQL でテーブル変数にデータ挿入するための便利な方法です。効率的で簡潔なコード記述が可能で、一時的なデータ格納や他のクエリでの再利用にも役立ちます。
補足:
- テーブル変数は、
DECLARE
ステートメントを使用して事前に宣言する必要があります。
-- テーブル変数の宣言
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
-- SELECT INTO を使用してテーブル変数にデータ挿入
SELECT CustomerID, FirstName, LastName
INTO @Customers
FROM Customers;
-- テーブル変数の内容を表示
SELECT *
FROM @Customers;
-- テーブル変数の削除
DROP TABLE @Customers;
このコードを実行すると、Customers
テーブルのすべてのデータが @Customers
テーブル変数に挿入され、その後、@Customers
テーブル変数の内容が表示されます。最後に、@Customers
テーブル変数は削除されます。
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
SELECT CustomerID, FirstName, LastName
INTO @Customers
FROM Customers
WHERE Country = 'Japan';
SELECT *
FROM @Customers;
DROP TABLE @Customers;
- テーブル変数を使用して、別のクエリでデータを選択する例:
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
SELECT CustomerID, FirstName, LastName
INTO @Customers
FROM Customers;
SELECT FirstName, LastName
FROM @Customers
WHERE CustomerID = 1;
DROP TABLE @Customers;
これらのサンプルコードを参考に、SELECT INTO
を使用してT-SQLでテーブル変数にデータ挿入してみてください。
T-SQLでテーブル変数にデータ挿入する他の方法
INSERT ステートメント
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO @Customers (CustomerID, FirstName, LastName)
VALUES (1, 'John', 'Doe');
INSERT INTO @Customers (CustomerID, FirstName, LastName)
VALUES (2, 'Jane', 'Doe');
SELECT *
FROM @Customers;
DROP TABLE @Customers;
EXECUTE ステートメント
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
DECLARE @sql nvarchar(max);
SET @sql = 'INSERT INTO @Customers (CustomerID, FirstName, LastName)
VALUES (1, ''John'', ''Doe'')';
EXEC (@sql);
SET @sql = 'INSERT INTO @Customers (CustomerID, FirstName, LastName)
VALUES (2, ''Jane'', ''Doe'')';
EXEC (@sql);
SELECT *
FROM @Customers;
DROP TABLE @Customers;
OPENROWSET 関数
DECLARE @Customers TABLE (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO @Customers
SELECT CustomerID, FirstName, LastName
FROM OPENROWSET('SQLOLEDB', 'SELECT CustomerID, FirstName, LastName FROM Customers');
SELECT *
FROM @Customers;
DROP TABLE @Customers;
これらの方法はそれぞれ異なる利点と欠点があります。
SELECT INTO は最も簡潔で効率的な方法ですが、WHERE
条件で挿入するデータを制限することはできません。
INSERT ステートメント は柔軟性がありますが、コード量が多くなります。
EXECUTE ステートメント は動的な挿入に適していますが、パフォーマンスが低下する可能性があります。
OPENROWSET 関数 は外部データソースからデータ挿入に適していますが、設定が複雑になります。
sql-server t-sql insert