8

ローカル データベースに多くのテーブルを作成し、それらを運用データベースに移動しました。

現在、データベースの微調整に取り組んでおり、PK、FK、デフォルト値、インデックスなど、ローカル データベース テーブルに多くの制約を作成しています。

これらの制約のみを本番データベースにコピーしたいと思います。それを行う方法はありますか?

私の本番データベースのテーブルには、すでにいくつかのデータが取り込まれていることに注意してください。したがって、それらを削除して再作成することはできません。

4

6 に答える 6

16

ツール(価格に見合うだけの価値がある)を購入したくない場合は、いつでもシステムカタログビューに問い合わせ、そこから情報を抽出して、新しいデータベースで実行できるスクリプトを作成できます。

たとえばデフォルトの制約の場合、このクエリはデータベース内のすべてのデフォルトの制約のリストを表示します。

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について多くのことを学ぶことができます。

つまり、これは従来の「作成または購入」の決定です:-)

マーク

于 2009-10-05T19:19:17.123 に答える
3

最良の方法は、すべての DDL コードをソース管理に格納することです。次に、dbGhost (私のお気に入り) やSQL Compareなどのツールを使用して、本番環境にデプロイします。

于 2009-10-05T18:30:10.657 に答える
2

Red Gate のSQL Compareは、これを行うための一般的な非無料の方法です。

于 2009-10-05T18:27:13.220 に答える
0

DBSourceToolsをお試しください。http://dbsourcetools.codeplex.com
更新スクリプトの作成に役立つスキーマ比較機能があります。
ただし、データベース全体でソースコード管理を使用する必要があることに注意してください。
これは、DBSourceToolsが行うように設計されたものです。開発者がデータベースをソース管理下に置くのに役立ちます。

于 2010-07-21T05:27:42.903 に答える
0

優れた無料のMicrosoft ツール。スキーマとデータをエクスポートできます。

Microsoft SQL Server データベース公開ウィザード

于 2009-10-05T22:05:58.380 に答える