136

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

これはSQLServer2008R2用です。

4

8 に答える 8

274

使用SELECT ... INTO

SELECT *
INTO ABC_1
FROM ABC;

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

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


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

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
于 2013-03-15T08:57:21.563 に答える
28

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
于 2013-03-15T09:16:15.817 に答える
16

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

  1. SQLManagementStudioでデータベースを開きます。
  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
于 2017-09-11T02:14:52.180 に答える
4

最初のオプション

select *
  into ABC_1
  from ABC;

2番目のオプション:SSISを使用します。つまり、オブジェクトエクスプローラーでデータベースを右クリックし、すべてのタスクを実行し、データをエクスポートします。

  • ソースとターゲット:DB
  • ソーステーブル:ABC
  • ターゲットテーブル:ABC_1(テーブルが作成されます)
于 2013-03-15T08:59:23.067 に答える
2

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

select top 0 * into <new_table> from <original_table>
于 2016-05-11T02:23:11.463 に答える
1

テーブルとそのデータ、制約、およびトリガーをコピーするには、SSISを作成する必要があります。私たちの組織には、kalromSystemsのKalAdminというソフトウェアがあり、無料バージョンをダウンロードできます(テーブルのコピー機能はオプションだと思います)。

于 2016-06-01T04:57:36.303 に答える
0

SQL Server Manegement StudioまたはNetcatを使用すると、SQLの操作が簡単になります

于 2013-03-15T08:59:39.613 に答える
0

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
于 2021-09-30T16:38:55.230 に答える