はい、開発インスタンスから本番インスタンスに変更を移行することは可能です。そのためには、本番データベースを変更で更新する SQL スクリプトを作成する必要があります。これは、スクリプトを手動で作成するか、ツールを使用してスクリプトを生成することで実現できます。どのような方法で行っても、データベースを更新するためのスクリプトが必要になります (データベースのツールを使用して手動で更新を実行することもできますが、短時間で更新を行う必要があるため、これは望ましくありません。これが確実かつ繰り返し発生することを望んでいます)。
これを行う最も簡単な方法は、SQL Compare (スキーマの更新用) や SQL Data Compare (データの更新用) などのツールを使用することです。これらは Redgate のものですが、かなりの費用がかかります。それらは価格に見合った価値があり、私が一緒に仕事をしたほとんどの企業は喜んでライセンス料を支払います。ただし、個人的にお金を払いたくない場合があります。これらのツールを使用するには、ソース データベースと宛先データベースに接続し、データベース間の相違点を (スキーマまたはデータで) 分析し、SQL スクリプトを生成します。これらのスクリプトは、手動で、またはツール自体によって実行できます。
理想的には、アプリケーションで作業するときは、作業を進めながらこれらのスクリプトを作成する必要があります。そうすれば、環境を更新するときが来たら、持っているスクリプトを実行するだけで済みます。データベース スクリプトがビルドに含まれるように、時間をかけてこれをビルド プロセスに含めることをお勧めします。スクリプトがべき等になるようにスクリプトを作成する必要があります。つまり、スクリプトを複数回実行しても最終結果は同じになります (目的のスキーマとデータに更新されたデータベース)。
これを管理する方法の 1 つは、データベースに DBVersions テーブルを作成することです。このテーブルには、すべてのスクリプトの更新が含まれています。たとえば、次のようなテーブルを作成できます (これは SQL Server 2008 ダイアレクトです)。
CREATE TABLE [dbo].[DBVersions] (
[CaseID] [int] NOT NULL,
[DateExecutedOn] [datetime] NOT NULL,
CONSTRAINT [PK_DBVersions] PRIMARY KEY CLUSTERED (
[CaseID] ASC
)
) ON [PRIMARY]
CaseID は、SQL 更新が必要な機能またはバグのケース (または問題) 番号を指します。ビルド プロセスでは、このテーブルをチェックして、スクリプトが既に実行されているかどうかを確認できます。そうでない場合は、それを実行します。これは、複数回実行できる方法でスクリプトを作成できない場合に便利です。すべてのスクリプトを無制限に実行できる場合、この表は厳密には必要ありませんが、デプロイメントが完了するたびに多数のスクリプトを実行する必要性を減らすのに役立つ場合があります。
Redgate ツールへのリンクは次のとおりです。他にもたくさんのツールがあるかもしれませんが、私はこれらのツールで非常に良い経験をしました.
http://www.red-gate.com/products/sql-development/sql-compare/
http://www.red-gate.com/products/sql-development/sql-data-compare/