ローカル データベースに多くのテーブルを作成し、それらを運用データベースに移動しました。
現在、データベースの微調整に取り組んでおり、PK、FK、デフォルト値、インデックスなど、ローカル データベース テーブルに多くの制約を作成しています。
これらの制約のみを本番データベースにコピーしたいと思います。それを行う方法はありますか?
私の本番データベースのテーブルには、すでにいくつかのデータが取り込まれていることに注意してください。したがって、それらを削除して再作成することはできません。
ツール(価格に見合うだけの価値がある)を購入したくない場合は、いつでもシステムカタログビューに問い合わせ、そこから情報を抽出して、新しいデータベースで実行できるスクリプトを作成できます。
たとえばデフォルトの制約の場合、このクエリはデータベース内のすべてのデフォルトの制約のリストを表示します。
SELECT
dc.name 'Constraint Name',
OBJECT_NAME(parent_object_id) 'Table Name',
c.name 'Column Name',
definition
FROM
sys.default_constraints dc
INNER JOIN
sys.columns c ON dc.parent_object_id = c.object_id
AND dc.parent_column_id = c.column_id
ORDER BY
OBJECT_NAME(parent_object_id), c.name
もちろん、それに基づいて、T-SQLステートメントを発行するクエリを作成して、ターゲットサーバーでこれらのデフォルトの制約を再作成することもできます。
SELECT
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(dc.parent_object_id) + '.' + OBJECT_NAME(dc.parent_object_id) +
' ADD CONSTRAINT ' + dc.name + ' DEFAULT(' + definition
+ ') FOR ' + c.name
FROM
sys.default_constraints dc
INNER JOIN
sys.columns c ON dc.parent_object_id = c.object_id
AND dc.parent_column_id = c.column_id
次のようなものが得られます(AdventureWorks
サンプルDBの場合)。
ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_rowguid DEFAULT((newid())) FOR rowguid
ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.ProductPhoto ADD CONSTRAINT DF_ProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_Primary DEFAULT(((0))) FOR Primary
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_rowguid DEFAULT((newid())) FOR rowguid
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.Address ADD CONSTRAINT DF_Address_rowguid DEFAULT((newid())) FOR rowguid
もちろん、出力される結果のT-SQLを好みに合わせて微調整することもできますが、基本的には、クエリからの結果をコピーして新しいデータベースに貼り付ければ、すぐに使用できます。
もちろん、外部キー関係(sys.foreign_keys)、チェック制約(sys.check_constraints)、インデックス(sys.indexesおよびsys.index_columns)などの同様のシステムカタログビューがあります。
少し手間がかかりますが、自分の時間に実行でき、その過程でSQLServerについて多くのことを学ぶことができます。
つまり、これは従来の「作成または購入」の決定です:-)
マーク
最良の方法は、すべての DDL コードをソース管理に格納することです。次に、dbGhost (私のお気に入り) やSQL Compareなどのツールを使用して、本番環境にデプロイします。
Red Gate のSQL Compareは、これを行うための一般的な非無料の方法です。
DBSourceToolsをお試しください。http://dbsourcetools.codeplex.com
更新スクリプトの作成に役立つスキーマ比較機能があります。
ただし、データベース全体でソースコード管理を使用する必要があることに注意してください。
これは、DBSourceToolsが行うように設計されたものです。開発者がデータベースをソース管理下に置くのに役立ちます。
優れた無料のMicrosoft ツール。スキーマとデータをエクスポートできます。