データベースDBにテーブルABCがあります。ABC_1、ABC_2、ABC_3という名前のABCのコピーを同じDBに作成したい。Management Studio(できれば)またはSQLクエリを使用してどうすればよいですか?
これはSQL Server 2008 R2用です。
データベースDBにテーブルABCがあります。ABC_1、ABC_2、ABC_3という名前のABCのコピーを同じDBに作成したい。Management Studio(できれば)またはSQLクエリを使用してどうすればよいですか?
これはSQL Server 2008 R2用です。
回答:
使用SELECT ... INTO
:
SELECT *
INTO ABC_1
FROM ABC;
これによりABC_1
、同じ列構造をABC
持ち、同じデータを含む新しいテーブルが作成されます。ただし、制約(キー、デフォルト値など)はコピーされません。
このクエリは、毎回異なるテーブル名で複数回実行できます。
データをコピーする必要がなく、同じ列構造を持つ新しい空のテーブルを作成するだけのWHERE
場合は、偽の式を含む句を追加します。
SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
SELECT TOP(0) *
常に偽のWHERE
ステートメントメソッドよりもクリーンな方法を使用していることがわかります
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
IDENTITY_INSERT
にON「手動」に設定し、ID列を許可するために、あなたはあなたの例では順序を混合します。また、列を明示的にリストする必要があります
すべての制約とキーを使用してテーブルを複製する場合は、次の手順に従います。
次に、データをコピーするために、以下のスクリプトを実行します。
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 top 0 * into <new_table> from <original_table>