web-dev-qa-db-ja.com

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

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

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

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テーブルを作成していますが、SQL Server 2008 R2のDmyテーブルにキーと制約が反映されていません。

SELECT * 
INTO Dmy 
FROM Dummy
8
Vinoth _S

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

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

options under Tools > Options > SQL Server Object Explorer > Scripting

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

14
Aaron Bertrand

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

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

enter image description here

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

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

enter image description here

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

それ以外の場合は、次のようなエラーメッセージが表示されます'データベースに' Address 'という名前のオブジェクトがすでに存在します。'、または'名前 'AK_Address_rowguid'は既にテーブル 'Person.Address'に存在します。 '

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

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

enter image description here

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

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

enter image description here

4. Set Scripting Option sタブで、Advancedをクリックし、Types to data to scriptオプションがデータのみ

注:Schema&Dataを選択した場合、生成されるスキーマスクリプトは、この回答の最初のメソッドで生成されるスクリプトと同じになります。

enter image description here

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

5
Milena Petrovic

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

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

インデックス用

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

FORデータ

  • データベース名を選択
  • それを右クリック
  • タスク>スクリプトの生成...を選択します。
  • 新しいウィンドウが開きます
  • 次を選択
  • 次に、特定のデータベースオブジェクトを選択し、テーブルABCを選択します。
  • 次を選択
  • 事前に進む>
  • データのみを入力するようにスクリプトに入力します
  • 次にOK>次へ>次へ>完了...
  • 新しく作成したテーブルでこのスクリプトを実行します
1
dsingh