SSIS を使用して SQL Server テーブル間で1つの行をコピーする方法
SQL Server のテーブル間で1つの行をコピーする方法
方法1:INSERT INTO ステートメントを使用する
これは、テーブル間で1つの行をコピーする最も簡単な方法です。次の構文を使用します。
INSERT INTO 宛先テーブル (列名1, 列名2, ...)
SELECT 列名1, 列名2, ...
FROM 複製元テーブル
WHERE 条件;
例
Customers
テーブルから Orders
テーブルに1つの行をコピーするには、次のクエリを使用します。
INSERT INTO Orders (CustomerID, OrderDate, ProductID, Quantity)
SELECT CustomerID, OrderDate, ProductID, Quantity
FROM Customers
WHERE CustomerID = 1;
方法2:EXEC sp_copy_row プロシージャを使用する
sp_copy_row
は、テーブル間でデータをコピーするために使用できるストアドプロシージャです。次の構文を使用します。
EXEC sp_copy_row @source_table = '複製元テーブル',
@source_rowid = 1,
@dest_table = '宛先テーブル',
@dest_rowid = 1;
EXEC sp_copy_row @source_table = 'Customers',
@source_rowid = 1,
@dest_table = 'Orders',
@dest_rowid = 1;
方法3:SSIS を使用する
SQL Server Integration Services (SSIS) は、データ移行や変換に使用できるツールです。 SSIS を使用して、テーブル間で1つの行をコピーすることができます。
手順
- SSIS パッケージを作成します。
- データソースとして複製元テーブルを追加します。
- データフロータスクを作成します。
- ソースからターゲットへのデータフローを作成します。
- パッケージを実行します。
上記以外にも、テーブル間で1つの行をコピーするには、さまざまな方法があります。 例えば、次の方法を使用できます。
- OPENQUERY
- SELECT INTO
- BULK INSERT
注意事項
- 複製元テーブルと宛先テーブルの構造が一致していることを確認する必要があります。
- 宛先テーブルに存在しない列をコピーしようとすると、エラーが発生します。
- PRIMARY KEY や UNIQUE 制約に違反する行をコピーしようとすると、エラーが発生します。
方法1:INSERT INTO ステートメントを使用する
-- 複製元テーブル
CREATE TABLE Customers (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Customers (CustomerID, FirstName, LastName)
VALUES (1, 'John', 'Doe');
-- 宛先テーブル
CREATE TABLE Orders (
OrderID int,
CustomerID int,
OrderDate datetime
);
-- Customers テーブルから Orders テーブルに1つの行をコピー
INSERT INTO Orders (CustomerID, OrderDate)
SELECT CustomerID, GETDATE()
FROM Customers
WHERE CustomerID = 1;
方法2:EXEC sp_copy_row プロシージャを使用する
-- 複製元テーブル
CREATE TABLE Customers (
CustomerID int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Customers (CustomerID, FirstName, LastName)
VALUES (1, 'John', 'Doe');
-- 宛先テーブル
CREATE TABLE Orders (
OrderID int,
CustomerID int,
OrderDate datetime
);
-- Customers テーブルから Orders テーブルに1つの行をコピー
EXEC sp_copy_row @source_table = 'Customers',
@source_rowid = 1,
@dest_table = 'Orders',
@dest_rowid = 1;
方法3:SSIS を使用する
SQL Server テーブル間で1つの行をコピーするその他の方法
方法4:OPENQUERY を使用する
OPENQUERY を使用して、別のデータベースのテーブルからデータをクエリし、その結果を現在のデータベースのテーブルに挿入することができます。
AdventureWorks
データベースの Person.Contact
テーブルから MyDatabase
データベースの Customers
テーブルに1つの行をコピーするには、次のクエリを使用します。
INSERT INTO MyDatabase.Customers (FirstName, LastName)
SELECT FirstName, LastName
FROM OPENQUERY(AdventureWorks, 'SELECT FirstName, LastName FROM Person.Contact WHERE ContactID = 1');
方法5:SELECT INTO を使用する
SELECT INTO を使用して、SELECT クエリの結果を新しいテーブルに挿入することができます。
SELECT CustomerID, OrderDate
INTO Orders
FROM Customers
WHERE CustomerID = 1;
方法6:BULK INSERT を使用する
BULK INSERT を使用して、ファイルからデータをテーブルに高速に挿入することができます。
BULK INSERT Customers
FROM 'C:\Temp\Customers.csv'
WITH (FIELDTERMINATOR = ',');
- 上記の方法を使用する前に、必要な権限を持っていることを確認する必要があります。
- データ型が一致していることを確認する必要があります。
sql sql-server