SQL Server-データベーステーブルのコピーを作成し、同じデータベースに配置しますか?


108

データベースDBにテーブルABCがあります。ABC_1、ABC_2、ABC_3という名前のABCのコピーを同じDBに作成したい。Management Studio(できれば)またはSQLクエリを使用してどうすればよいですか?

これはSQL Server 2008 R2用です。


1
別の投稿は直接関連していませんが、上記のユースケースに関連している可能性があります-stackoverflow.com/questions/6810425/…これは、テーブルのコピーを編集する場合に役立ちます(例:nullの許可、データ型の変更など) 。)コピーを再作成する必要はありません。
sequel.learner 2013年

回答:


212

使用SELECT ... INTO

SELECT *
INTO ABC_1
FROM ABC;

これによりABC_1、同じ列構造をABC持ち、同じデータを含む新しいテーブルが作成されます。ただし、制約(キー、デフォルト値など)はコピーされません。

このクエリは、毎回異なるテーブル名で複数回実行できます。


データをコピーする必要がなく、同じ列構造を持つ新しい空のテーブルを作成するだけのWHERE場合は、偽の式を含む句を追加します。

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

3
私の問題に対する完璧な答え。
sequel.learner 2013年

8
完全には機能しません...オリジナルの計算列は、ターゲットの同じ列としてコピーされません。また、PKおよびデフォルトの制約もコピーされません
Simon Green

@SimonGreen-あなたはあなたのコードでこの問題に関する新しい質問を投稿することができます。
Mahmoud Gamal、2015年

3
もちろん、完全には機能しません。彼は、制約はコピーされず、主キーやデフォルト値もコピーされないと警告しました。彼が提供するコマンドは、(彼が言ったように)同じ列構造を持つ新しいテーブルを作成し、すべてのデータを新しいテーブルに挿入します。
user5855178 2017

1
SELECT TOP(0) *常に偽のWHEREステートメントメソッドよりもクリーンな方法を使用していることがわかります
Thymine '29年

21

SSMS UIを介したスキーマのコピー(DDLの生成)

SSMSでのあなたのデータベース拡張オブジェクトエクスプローラを、に行くのテーブル、あなたが興味を選択しているテーブルの上で右クリックしてスクリプトの表のようにするために作成する新しいクエリエディタウィンドウを。検索と置換(CTRL + H)を実行してテーブル名を変更します(つまりABC、[ 検索ABC_1する文字列 ] フィールドに入力し、[ 置換後の文字列 ]に入力して[ OK ]をクリックします)。

T-SQLを介してスキーマをコピーする

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

1
このメソッドはインデックスもコピーしますか?私はそれを試しました、そしてそれはしませんでした。
BornToCode

3
あなたが設定する必要がありますIDENTITY_INSERTON「手動」に設定し、ID列を許可するために、あなたはあなたの例では順序を混合します。また、列を明示的にリストする必要があります
jean

2
@jeanありがとうございます。6年後に気付かれずに発見!修繕。
JohnLBevan

これで問題はほぼ解決しました。最後のトリックは、SSMSのツリーの「Columns」フォルダーをエディターにドラッグして、列のリストを取得できることです。すべてのテーブルにタイムスタンプ列があるので、列のリストを取得して、タイムスタンプを削除する必要がありました。
Wade Hatler

10

すべての制約とキーを使用してテーブルを複製する場合は、次の手順に従います。

  1. SQL Management Studioでデータベースを開きます。
  2. 複製するテーブルを右クリックします。
  3. ->作成先->新しいクエリエディターウィンドウの順に選択します。これにより、新しいクエリウィンドウでテーブルを再作成するスクリプトが生成されます。
  4. スクリプト内のテーブル名と相対キーと制約を変更します。
  5. スクリプトを実行します。

次に、データをコピーするために、以下のスクリプトを実行します。

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF

4

最初のオプション

select *
  into ABC_1
  from ABC;

2番目のオプション:オブジェクトエクスプローラーでデータベースを右クリックするSSISを使用>すべてのタスク>データのエクスポート

  • ソースとターゲット:DB
  • ソーステーブル:ABC
  • ターゲットテーブル:ABC_1(テーブルが作成されます)

2

これは別のオプションです。

select top 0 * into <new_table> from <original_table>

2
このリクエストはデータなしでテーブルをコピーします。ユーザーがテーブルをコピーするように要求しました。
Alekzander 2017

1

SQLサーバー管理スタジオまたはネットキャットを使用すると、SQLの操作が簡単になります


1

テーブルとそのデータ、制約、トリガーをコピーするには、SSISを記述する必要があります。私たちの組織には、ダウンロード用の無料バージョンがあるkalrom SystemsのKal Adminというソフトウェアがあります(テーブルのコピー機能はオプションだと思います)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.