2017-06-30 11 views
0

私は開発環境内で作業されているいくつかのテーブルを用意して、本番環境に移行しました。それらが本番環境に存在しない場合は、SSMSからテーブル作成スクリプトを生成して実行するだけです。ただし、テーブルが本番環境にすでに存在する場合がありますが、必要なのは追加の列または制約だけです。問題は何が変わったのかを正確に知ることです。テーブルを作成するか、変更された/新しいカラムのみを追加する

SQLにCREATE TABLEステートメントを既存のテーブルと比較させ、変更されたものだけを適用する方法はありますか?基本的に私は以下のことをやろうとしており、SQLはテーブルがすでに存在すると正しく文句を言う。

ALTERクエリを手作業で書く必要があります。実際の例では、膨大な量のカラムのために難しいでしょう。何が変わったのかを見るためのより良い/簡単な方法はありますか?これには、2つの別々のデータベースサーバーが含まれています。

CREATE TABLE suppliers 
(supplier_id int NOT NULL, 
    supplier_name char(50) NOT NULL, 
    contact_name char(50), 
    CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) 
); 

CREATE TABLE suppliers 
(supplier_id int NOT NULL, 
    supplier_name char(50) NOT NULL, 
    contact_name char(50), 
    contact_number char(20), --this has been added 
    CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) 
); 

また、データが失われる可能性があるため、削除および再作成はできません。

答えて

1

SSMSは、テーブルデザイナで変更を行った場合(オブジェクトエクスプローラでテーブルを右クリックして[デザイン]を選択した場合)、スキーマ変更スクリプトを生成できます。次に、変更をすぐに適用する代わりに、メニューから「表デザイナー」 - >「変更スクリプトの生成」を選択します。変更に応じて、データは保持されますが、SSMSはテーブルを再作成する必要があります。 SSMSでは、[ツール] - > [オプション] - > [デザイナ] - > [テーブルとデータベースデザイナ]の下にある[テーブルの再作成が必要な変更を保存しない]オプションをオフにする必要があります。スクリプトを見直して、それがうまくいっていることを確認してください。

SQL Serverのデータツール(SSDT)とサードパーティ製のツール(Red-GateやApexSQLなど)は、スキーマ比較機能を備えているため、事後に必要なDDLを生成できます。また、継続的な統合とソース管理の統合を容易にするための移行スクリプトなどの機能もあります。データベースオブジェクトをソース管理下に置いて、開発プロセスの一環としてデータベースツールを活用することをお勧めします。

+0

ありがとうございます。私は変更スクリプトの生成をテストしたばかりで、変更が反映されています。それはこの目的のために十分です!私はコードとデータベースの両方でソース管理を採用したいと思いますが、私はこれらのタイプの機能をサポートしていないベンダーのSDKにはかなりの制限があります。 –

0

通常、データベースの外部の機能として、データベース移行のようなものを使用します。たとえば、いくつかのC#アプリケーションにFluentMigratorというツールがあります。コードで必要な新しい列をdevデータベースに追加するスクリプトを作成します。プロジェクトがデバッグされると、FMはスクリプトを実行してdev dbを変更し、devコードは新しい列を使用し、すべてがうまくいきます。 FMは再びスクリプトを実行しないことを知っている

FMスクリプトはリリースの一部であり、アプリケーションはウェブサイトにライブされ、マイグレーションは再びライブDBを更新してライブを実行するコードは新しい列を使用し、それでもすべてがうまくいきます。

SQL Serverの外部に何もない場合(それを管理する方法はわかりませんが..)、スクリプトを書く必要がありますスクリプトを生成する)、DBの権利を変更する?したがって、これらのスクリプトを保存して「実行中」のプロセスの一部として実行してください

これらのデータベースがすでに存在し、スクリプトを投げ捨てているという観点から見てみると、 Database Schema Compareツールを使用して一度だけ追いつく。 - マイクロソフトSSDTの1を持って、それがどのように使われるかに関する詳しい情報は、こちらを参照してください。

https://msdn.microsoft.com/en-us/library/hh272690(v=vs.103).aspx

0

あなたは多くの制約を持っていない場合、私はあなたの新しいにデータをキャストし、インポートする動的なスクリプトを作成示唆テーブル。これが失敗しない場合は、古いテーブルを削除し、新しく作成したテーブルの名前を変更するだけです。

関連する問題