あるテーブルから別のテーブルにインデックスをコピーする必要があります。インデックスがたくさんあるので、最初から作り直したくありません。とにかくエラーが発生しやすいようです。
を使用して構造をコピーしました
SELECT * INTO [BackupTable] FROM [OriginalTable]
しかし、それはインデックス、制約、トリガーなどをコピーしません
誰かがこれを行う方法を知っていますか?
インデックス定義をコピーしますか?
次に、Microsoft SQL Managementツールの[スクリプト]オプションを使用して、インデックスやトリガーなどをリバースエンジニアリングできます。
SQL Management Studioのテーブルリストでテーブル名を右クリックし、[スクリプトテーブル]、[作成先]の順に選択するだけです
インデックスの物理ストレージに関連しているため、インデックスデータをコピーすることはできません。
最初「ツール/オプション/ SQLServerオブジェクトエクスプローラー/スクリプト/スクリプトインデックス」が「True」に設定されていることを確認してください。これはSQL管理ツールの一部のバージョンではfalseに設定されています(Markに感謝)
デフォルトでは、右クリックテーブル「CREATE」にはインデックスやトリガーは含まれず、テーブルの定義と制約のみが含まれます。
データベースを右クリックし、[タスク]-> [スクリプトの生成]をクリックすると、これを実行できます。
編集:これはデフォルトですが、TFDが述べているように、ありがたいことに変更できます。
私はSQLServerに特に精通していませんが、データベーステーブルが定義され、他のデータベースで使用される方法に基づいて、データをコピーするかSELECTINTOを使用するだけでこれを行う方法はないと思います。
インデックスは、テーブル構造の一部として定義する必要があり、テーブルに存在する可能性のある既存のデータに対して生成する必要があります。
これを行う唯一の方法は、テーブルの作成後にALTERTABLEステートメントを使用するCREATETABLEステートメントの実行中です。
データ自体を操作するためのステートメントは、テーブル定義を操作することとは別のものであるため、これに対する回避策やショートカットはないと思います。
すでに持っているテーブルに基づいて適切なインデックスをすべて作成するALTERTABLEステートメントを生成するために利用できるツールがあると確信しています。これにより、簡単で信頼性の高いものになります。
Sysindexes(またはバージョンによってはsys.indexes)の情報を使用してスクリプトを作成し、すべてのインデックスを再作成できますが、Select * intoアプローチを使用しても、外部キーと主キー、または拡張プロパティは取得されません。 。 2005以降のバージョンを使用している場合はSSISの使用を検討する必要があります。また、2000を使用している場合はDTS)、どちらにもこの種のコピーを簡素化するウィザードがあります。
SSMSでインデックスを右クリックし、> createとしてスクリプトを実行します。
テーブル名とインデックス名を変更すると、設定する必要があります