データベース操作を自動化:SQL Server 2008 でスクリプトを生成して選択レコードを挿入
SQL Server 2008 で選択したレコードを挿入するスクリプトを生成する方法
このチュートリアルでは、SQL Server 2008 で選択したレコードを別のテーブルに挿入するためのスクリプトを生成する方法を説明します。この方法は、データを移行したり、既存のテーブルに新しいレコードを追加したりする場合に役立ちます。
要件
- SQL Server 2008 がインストールされていること
- 挿入するレコードを含むテーブルへのアクセス権
- 挿入先のテーブルへのアクセス権
手順
- SQL Server Management Studio (SSMS) を起動します。
- 接続するサーバーインスタンスとデータベースを選択します。
- オブジェクト エクスプローラーで、挿入するレコードを含むテーブルを右クリックします。
- [タスク] > [スクリプトの生成] を選択します。
- [スクリプトの種類] ペインで、[データ操作] を選択します。
- [操作] ペインで、[INSERT] を選択します。
- [ターゲット テーブル] ペインで、挿入先のテーブルを選択します。
- [ソース] ペインで、[既存のテーブルまたはビュー] を選択します。
- [列のマッピング] ペインで、ソース テーブルの列とターゲット テーブルの列をマップします。
- [フィルター] ペインで、挿入するレコードを絞り込むための WHERE 句を入力します。(オプション)
- [スクリプト] ペインで、生成されたスクリプトを確認します。
- [実行] ボタンをクリックして、スクリプトを実行します。
例
次の例では、Customers
テーブルから選択したレコードを Orders
テーブルに挿入する方法を示します。
INSERT INTO Orders
(
CustomerID,
OrderDate,
ProductID,
Quantity
)
SELECT
CustomerID,
OrderDate,
ProductID,
Quantity
FROM Customers
WHERE OrderDate > '2023-01-01';
このスクリプトは、OrderDate
が 2023 年 1 月 1 日以降のすべてのレコードを Orders
テーブルに挿入します。
ヒント
- 複雑なクエリを生成する場合は、[詳細設定] ボタンを使用して、さらに多くのオプションを表示できます。
- スクリプトを後で編集できるように、スクリプトをファイルに保存することをお勧めします。
- データを挿入する前に、必ずバックアップを取ってください。
サンプルコード:SQL Server 2008 で選択したレコードを別のテーブルに挿入する
INSERT INTO Orders
(
CustomerID,
OrderDate,
ProductID,
Quantity
)
SELECT
CustomerID,
OrderDate,
ProductID,
Quantity
FROM Customers
WHERE OrderDate > '2023-01-01';
説明:
INSERT INTO Orders
:この句は、Orders
テーブルにデータを挿入することを指定します。(CustomerID, OrderDate, ProductID, Quantity)
:この句は、Orders
テーブルに挿入する列を指定します。SELECT
:この句は、挿入するデータを取得するために使用するクエリを指定します。FROM Customers
:この句は、データを取得するソース テーブルを指定します。WHERE OrderDate > '2023-01-01'
:この句は、OrderDate
が 2023 年 1 月 1 日以降のレコードのみを選択するようにクエリをフィルターします。
このスクリプトをどのように実行するか:
- 新しいクエリ ウィンドウを開きます。
- 上記のスクリプトをクエリ ウィンドウに貼り付けます。
このスクリプトをカスタマイズする方法:
- 挿入する列を変更するには、
INSERT INTO
句の列リストを変更します。 - 取得するデータを選択するには、
SELECT
句を変更します。 - 挿入するレコードをフィルターするには、
WHERE
句を変更します。
注意事項:
- このスクリプトは、
Customers
とOrders
テーブルが同じデータベースにあることを前提としています。 - ターゲット テーブルに存在しない列をソース テーブルから選択しようとすると、エラーが発生する可能性があります。
SQL Server 2008 で選択したレコードを別のテーブルに挿入するその他の方法
INSERT ... EXECUTE ステートメントを使用する:
この方法は、ストアド プロシージャまたは外部テーブル関数を使用して、挿入するレコードを動的に生成する場合に役立ちます。
INSERT INTO Orders
EXEC sp_GenerateOrders
@customerID INT,
@orderDate DATE;
MERGE ステートメントを使用する:
この方法は、既存のレコードを更新したり、新しいレコードを挿入したりする場合に役立ちます。
MERGE INTO Orders
USING Customers
ON (Customers.CustomerID = Orders.CustomerID)
WHEN MATCHED THEN
UPDATE SET
OrderDate = Customers.OrderDate,
ProductID = Customers.ProductID,
Quantity = Customers.Quantity
WHEN NOT MATCHED THEN
INSERT (CustomerID, OrderDate, ProductID, Quantity)
VALUES (Customers.CustomerID, Customers.OrderDate, Customers.ProductID, Customers.Quantity);
OPENQUERY 関数を使用する:
この方法は、別のデータベースまたはサーバーにあるテーブルからレコードを挿入する場合に役立ちます。
INSERT INTO Orders
SELECT *
FROM OPENQUERY('AdventureWorks2012', 'SELECT * FROM Customers WHERE OrderDate > ''2023-01-01''');
- シンプルでわかりやすい方法が必要な場合は、
INSERT ... SELECT
ステートメントを使用します。 - 動的に生成されたレコードを挿入する必要がある場合は、
INSERT ... EXECUTE
ステートメントを使用します。 - 既存のレコードを更新したり、新しいレコードを挿入したりする必要がある場合は、
MERGE
ステートメントを使用します。 - 別のデータベースまたはサーバーにあるテーブルからレコードを挿入する必要がある場合は、
OPENQUERY
関数を使用します。
sql database sql-server-2008