web-dev-qa-db-ja.com

SQLServerで1つのテーブルから別のテーブルにインデックスをコピーする方法

あるテーブルから別のテーブルにインデックスをコピーする必要があります。インデックスがたくさんあるので、最初から作り直したくありません。とにかくエラーが発生しやすいようです。

を使用して構造をコピーしました

SELECT * INTO [BackupTable] FROM [OriginalTable]

しかし、それはインデックス、制約、トリガーなどをコピーしません

誰かがこれを行う方法を知っていますか?

18
Byron Whitlock

インデックス定義をコピーしますか?

次に、Microsoft SQL Managementツールの[スクリプト]オプションを使用して、インデックスやトリガーなどをリバースエンジニアリングできます。

SQL Management Studioのテーブルリストでテーブル名を右クリックし、[スクリプトテーブル]、[作成先]の順に選択するだけです

インデックスの物理ストレージに関連しているため、インデックスデータをコピーすることはできません。

最初「ツール/オプション/ SQLServerオブジェクトエクスプローラー/スクリプト/スクリプトインデックス」が「True」に設定されていることを確認してください。これはSQL管理ツールの一部のバージョンではfalseに設定されています(Markに感謝)

enter image description here

44
TFD

デフォルトでは、右クリックテーブル「CREATE」にはインデックスやトリガーは含まれず、テーブルの定義と制約のみが含まれます。

データベースを右クリックし、[タスク]-> [スクリプトの生成]をクリックすると、これを実行できます。

編集:これはデフォルトですが、TFDが述べているように、ありがたいことに変更できます。

9
Mark Sowul

私はSQLServerに特に精通していませんが、データベーステーブルが定義され、他のデータベースで使用される方法に基づいて、データをコピーするかSELECTINTOを使用するだけでこれを行う方法はないと思います。

インデックスは、テーブル構造の一部として定義する必要があり、テーブルに存在する可能性のある既存のデータに対して生成する必要があります。

これを行う唯一の方法は、テーブルの作成後にALTERTABLEステートメントを使用するCREATETABLEステートメントの実行中です。

データ自体を操作するためのステートメントは、テーブル定義を操作することとは別のものであるため、これに対する回避策やショートカットはないと思います。

すでに持っているテーブルに基づいて適切なインデックスをすべて作成するALTERTABLEステートメントを生成するために利用できるツールがあると確信しています。これにより、簡単で信頼性の高いものになります。

1
Jarod Elliott

Sysindexes(またはバージョンによってはsys.indexes)の情報を使用してスクリプトを作成し、すべてのインデックスを再作成できますが、Select * intoアプローチを使用しても、外部キーと主キー、または拡張プロパティは取得されません。 。 2005以降のバージョンを使用している場合はSSISの使用を検討する必要があります。また、2000を使用している場合はDTS)、どちらにもこの種のコピーを簡素化するウィザードがあります。

SSISインポートエクスポート

DTSインポートエクスポート

1
cmsjr

SSMSでインデックスを右クリックし、> createとしてスクリプトを実行します。

テーブル名とインデックス名を変更すると、設定する必要があります

1
Sam