2

データベーススクリプトを生成するとき、別の環境に移行するデータをスクリプト化しています。IDENTITY_INSERTのオン/オフを自動的に設定できるようにするスクリプト生成の設定はありますか?生成されたスクリプトで各テーブルを手動で調べて設定する必要はありませんか?SSMSを使用していますが、SSMSを介してこれを実行したいと思います。

これが私が得ているものです:

INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');

これが私が欲しいものです:

SET IDENTITY_INSERT my_table ON
INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');
SET IDENTITY_INSERT my_table OFF
4

2 に答える 2

5

これは古い質問ですが、受け入れられた回答と受け入れられた回答へのコメントは、SSMSに関して完全に正しくありません。

Sql Server Management Studio(SSMS)でスクリプトの生成タスクを使用してデータを含むスクリプトを生成する場合set identity_insert、ID列を持つテーブルのステートメントが含まれます。

オブジェクトエクスプローラーの場合:[タスク]->[スクリプトの生成]->[すべてのテーブルまたは選択したテーブル]->[詳細]->[データまたはデータを含むスキーマ]

  • データをスクリプト化するテーブルにidentityプロパティを持つ列がない場合、ステートメントは生成されませset identity_insert

  • データをスクリプト化するテーブルにidentityプロパティを持つ列がある場合、ステートメントが生成されますset identity_insert

SSMS2008およびSSMS2012を使用してテストおよび確認済み

my_table_idOPの状況では、元のテーブルのソーステーブルでIDプロパティが設定されていなかったと思いますが、IDプロパティはmy_table_id宛先テーブルで設定されていました。

目的の出力を取得するには、テーブルをスクリプトデータに変更my_table_idして、IDプロパティを持たせる必要があります。

この記事では、これを行う手順を詳しく説明します(SSMSでデザイナーを使用せずに):既存のSQLServer列のIDプロパティを追加または削除する-GregRobidoux

  • Identityプロパティを使用して新しい列を作成します

  • 既存のid列から新しい列にデータを転送します

  • 既存のid列を削除します。

  • 新しい列の名前を元の列名に変更します

于 2016-12-25T13:35:17.933 に答える
1

スクリプトの生成に使用しているツールについては言及していませんが、Red-Gate Data Compareのようなツールを使用している場合、比較に自動インクリメントフィールドを含めると、これらのステートメントが生成されます。SSMSにそのようなオプションがあることを私は知りません。

Visual Studio PremiumまたはUltimateエディションを使用している場合は、データの比較と同期のオプションがあるDBPro(Database Professional)にもアクセスできます。これにより、IDENTITY_INSERTステートメントも生成されると思います。

于 2012-10-02T19:31:25.317 に答える