データベースDBにテーブルABCがあります。同じDBにABC_1、ABC_2、ABC_3という名前のABCのコピーを作成したいと思います。Management Studio(できれば)またはSQLクエリを使用してこれを行うにはどうすればよいですか?
これはSQLServer2008R2用です。
データベースDBにテーブルABCがあります。同じDBにABC_1、ABC_2、ABC_3という名前のABCのコピーを作成したいと思います。Management Studio(できれば)またはSQLクエリを使用してこれを行うにはどうすればよいですか?
これはSQLServer2008R2用です。
使用SELECT ... INTO
:
SELECT *
INTO ABC_1
FROM ABC;
ABC_1
これにより、同じ列構造をABC
持ち、同じデータを含む新しいテーブルが作成されます。ただし、制約(キー、デフォルト値など)はコピーされません。
このクエリは、毎回異なるテーブル名で複数回実行できます。
データをコピーする必要がなく、同じ列構造で新しい空のテーブルを作成するだけの場合WHERE
は、偽の式を使用して句を追加します。
SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
SSMSで、オブジェクトエクスプローラーでデータベースを展開し、[テーブル]に移動して、目的のテーブルを右クリックし、[スクリプトテーブル] 、 [作成先] 、 [新しいクエリエディターウィンドウ]を選択します。検索と置換(CTRL + H)を実行してテーブル名を変更します(つまりABC
、「検索対象」フィールドに入力ABC_1
し、「置換先」に入力して「 OK 」をクリックします)。
SQLでこれを行う方法を示す他の回答もうまく機能しますが、この方法との違いは、インデックス、制約、およびトリガーも取得できることです。
データを含める場合は、このテーブルを作成した後、次のスクリプトを実行してABCからすべてのデータをコピーします(IDフィールドがある場合は同じID値を維持します)。
set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
すべての制約とキーを使用してテーブルを複製する場合は、以下の手順に従います。
次に、データをコピーするには、以下のスクリプトを実行します。
SET IDENTITY_INSERT DuplicateTable ON
INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... )
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable
SET IDENTITY_INSERT DuplicateTable OFF
最初のオプション
select *
into ABC_1
from ABC;
2番目のオプション:SSISを使用します。つまり、オブジェクトエクスプローラーでデータベースを右クリックし、すべてのタスクを実行し、データをエクスポートします。
これは別のオプションです:
select top 0 * into <new_table> from <original_table>
テーブルとそのデータ、制約、およびトリガーをコピーするには、SSISを作成する必要があります。私たちの組織には、kalromSystemsのKalAdminというソフトウェアがあり、無料バージョンをダウンロードできます(テーブルのコピー機能はオプションだと思います)。
SQL Server Manegement StudioまたはNetcatを使用すると、SQLの操作が簡単になります
N回実行したい場合(現実の世界では実用的でない場合があります)、これを試してみてください。
declare @counter int
set @counter = 2
declare @tname NVARCHAR(100)
DECLARE @SQString NVARCHAR(MAX)
while(@counter <= 20) -- duplicate 20 times
begin
SET @tname= concat('Table_',@counter)
SET @SQString = 'select * into ' + @tname + ' from Table_1'
EXEC (@SQString)
set @counter = @counter + 1
End