4

新しい列がテーブルに追加されましたが、新しい列はテーブル定義の最後 (右端の列) ではなく、テーブルの中央に追加されました。

表の違い

Redgate SQL ソース管理でこれをコミットしようとすると、「これらの変更によりデータが失われる可能性があります」という警告が表示されます。

  • データ損失は本当に発生しますか?
  • 変更スクリプトをプレビューして、データが失われないことを確認する方法はありますか?
    • スクリプトをコピーして、簡単に Migrations V2 スクリプトに変換できますか?
  • 私はちょうどする必要がありますか?
    • SSMS でテーブルを編集し、新しい列を最後に移動します
    • または移行スクリプトを作成しますか?
  • もしそうなら、繰り返し作業を行うための便利なツールはありますか?
4

3 に答える 3

5

私が Red Gate で SQL ソース管理を行っていることを前もって開示します。

その変更では、テーブルを再作成する必要があります。デフォルトでは、SSMS ではその変更を保存できません。ただし、そのオプションは SSMS で無効になっている必要があります。[ツール] -> [オプション] -> [デザイナー] -> [テーブルおよびデータベース デザイナー] -> [テーブルの再作成が必要な変更を保存しない] の下にあります。

その機能が無効になっている場合、SQL ソース管理はそれを潜在的なデータ損失の状況として検出し、移行スクリプトを追加するかどうかを確認するように求めます。

チーム内の他の開発者が get latest を介してこの変更を取得すると、ローカル データベースの現在の状態に応じて、SQL ソース管理により、データ損失の可能性が詳細に示されます。唯一の変更が既存のテーブルへの列の追加である場合、変更されていない列のデータは削除されません。

別の DB (例: staging/UAT/prod) にデプロイしていて、SQL Compare がある場合、別の非ローカル データベースに対してこれを実行しようとすると、それを使用して DB に適用されるものを正確に確認できます。デプロイ スクリプトの作成オプションを選択すると、実行前に SQL のサニティ チェックを行うことができます。

あなたが言うように、テーブルの最後に列を追加すると再構築の必要がなくなるため、列の場所を気にする必要がない場合は、おそらくこれを回避する最も簡単な方法です。

または、移行スクリプトを次の場所に追加できます。

  1. 一時名を使用して、新しい構造を持つ新しいテーブルを作成します
  2. 既存のデータを一時テーブルにコピーします
  3. 既存のテーブルを削除する
  4. 新しい一時テーブルの名前を元の名前に変更します

ブランチとマージ、および DVCS システムをより適切にサポートするために、移行の仕組みを変更するベータ機能である Migrations v2 について言及されています。http://www.red-gate.com/migrationsを参照

バージョン 1 移行スクリプトを v2 移行スクリプトに変換するには、いくつかの変更が必要です。かなり些細な変更です。現在、これを文書化する作業を行っています。この変更に関する詳細情報が必要な場合は、Google グループでお問い合わせください。https://groups.google.com/forum/#!forum/red-gate-migrations

于 2013-10-14T10:35:07.750 に答える
1

移行スクリプトが不要になるように、SSMS を使用して列をテーブルの最後に移動しました。

列を移動するのが不便な同様のシナリオで、これは SSMS スクリプトを Migrations V2 スクリプトに変換するために行ったことです。

  • SSMS の変更を元に戻す (列を削除)
  • SSMSで変更をやり直しますが、変更をデータベースに直接保存する代わりに、変更スクリプトを保存しました
  • 変更スクリプトを修正しました
    • SSMS トランザクションと環境ラッパーをトリム
    • ガード句を追加: IF COL_LENGTH('MyTable','MyColumn') IS NULL
    • データベースを汚さずにスクリプトをテストするために、BEGIN TRAN - ROLLBACK TRAN でスクリプトをラップしました。
    • GO を END BEGIN に置き換え
    • ロールバックされたトランザクション内でテスト済み
    • BEGIN TRAN - ROLLBACK TRAN 開発ラッパーを削除

SSMS から Redgate への変換のビジュアル差分

于 2013-10-16T09:40:06.460 に答える