同じ制約とインデックスで新しいテーブルを作成するにはどうすればよいですか?


8

主キー制約とそのテーブルに非クラスター化インデックスを含む新しいテーブルを作成しています。

キーとインデックスだけでなく、同じ構造と値を持つ別のテーブルを作成したいのですが。

create table Dummy (id integer ,name varchar(20),salary integer
Constraint PK_Con_id primary key(id))

insert into Dummy values(11,'AAA',1000);
insert into Dummy values(12,'BBB',2000);
insert into Dummy values(13,'CCC',3000);
insert into Dummy values(14,'DDD',4000);

select * from Dummy;

create nonclustered index IX_Name 
on Dummy(Name)

現在、Dmyテーブルを作成していますがDmy、SQL Server 2008 R2のキーと制約がテーブルに反映されません。

SELECT * 
INTO Dmy 
FROM Dummy

回答:


14

SELECT INTOはこれを行いません。列名とデータ型を維持しますが、制約、インデックスなど、テーブルの他の多くの側面を保持しないためです。いずれかの列にIDENTITYプロパティがある場合、列の外側に保持されるのはIDENTITYプロパティです。

オブジェクトエクスプローラーで元のテーブルを右クリックし、[スクリプトテーブルの形式]> [作成先]> [新しいクエリウィンドウ]を選択します。すべての制約などを含む元のテーブルのCREATE TABLEスクリプトが必要です。すべてを取得するには、これらの設定のいくつか([ツール]> [オプション]> [SQL Serverオブジェクトエクスプローラ]> [スクリプト])をtrueに設定する必要がある場合があります。必要なテーブル属性なので、これには試行錯誤が必要です。

[ツール]> [オプション]> [SQL Serverオブジェクトエクスプローラ]> [スクリプト]のオプション

次に、そのスクリプトを手動で変更して新しいテーブル名を指定し、すべての制約とインデックス名が一意になるように調整してください(これがどの程度の作業になるかは、命名規則が確立されているかどうかによって異なります) SQL Serverがスローするものをそのまま使用する場合)。


5

すべてSQL Server Management Studioで実行できます。

スクリプトテーブルとしてのオプションは、主キーと外部キーと制約のためのコードを作成して生成します。インデックス用のスクリプトは作成されないため、別の手順で作成する必要があります。タイプ、SSMSオブジェクトエクスプローラーですべてのオブジェクトタイプノードを展開することをお勧めします。

ここに画像の説明を入力してください

テーブル構造、主キーと外部キー、および制約のスクリプトを作成するには

  1. SQL Server Management Studioを実行する
  2. では、オブジェクトエクスプローラ、拡張データベースを
  3. 展開テーブル
  4. テーブルを右クリックして、スクリプトテーブルを選択します 作成| 新しいクエリエディターウィンドウ

ここに画像の説明を入力してください

生成されたスクリプトが[クエリエディター]タブに表示されます。テーブル、主キーと外部キー、制約名は一意である必要があるため、必ず変更してください。

それ以外の場合は、「データベースに「アドレス」という名前のオブジェクトがすでに存在します」などエラーメッセージが表示されます。、または'AK_Address_rowguid'という名前のインデックスまたは統計がテーブル 'Person.Address'に既に存在するため、操作は失敗しました。

インデックスのスクリプトを作成するには

上記と同様の手順を使用します。

ここに画像の説明を入力してください

データのINSERT INTOスクリプトを作成するには

  1. (テーブルではなく)データベースを右クリックします。
  2. タスクを開く| スクリプトを生成する
  3. [ オブジェクト選択 ]タブで、スクリプトを実行するテーブルを選択します

ここに画像の説明を入力してください

4.In 設定スクリプトオプションのタブをクリックし詳細設定をして確認して、スクリプトへのデータの種類オプションがに設定されているデータのみ

注:[ スキーマとデータ]を選択した場合、生成されるスキーマスクリプトは、この回答の最初の方法で生成されるスクリプトと同じになります。

ここに画像の説明を入力してください

5.スクリプトを実行する前に、テーブル名を新しいテーブルの名前に更新します。


1

FORスキーマ -テーブル、制約、キー

  • オブジェクトエクスプローラーで、[テーブル(ABCなど)]> [右クリック]を選択します。
  • 次に、[スクリプトテーブル]> [CREATE TO]> [新しいクエリエディターウィンドウ]を選択します。
  • ABCのテーブル作成スクリプトが開きます
  • テーブル名を変更
  • PKを変更する
  • 制約名を変更
  • インデックス名を変更
  • このスクリプトを実行すると、テーブルは同じ構造で作成されますが、名前は異なります...

FORインデックス

  • テーブルABCを選択>それを展開
  • [INDEX]を選択し、[NON CLUSTERED INDEX]を右クリックします。
  • スクリプトインデックスAS>作成TO>新しいクエリエディターウィンドウ
  • インデックス名を変更
  • 新しく作成したテーブルでINDEXを作成するために実行します。

データ用

  • データベース名を選択
  • それを右クリック
  • タスク>スクリプトの生成...を選択します。
  • 新しいウィンドウが開きます
  • 次を選択
  • 次に、特定のデータベースオブジェクトを選択し、テーブルABCを選択します。
  • 次を選択
  • 事前に進む>
  • データのみを入力するようにスクリプトに入力します
  • 次にOK>次へ>次へ>完了...
  • 新しく作成したテーブルでこのスクリプトを実行します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.