web-dev-qa-db-ja.com

SSDTテーブルの列の順序

SQLPACKAGE.EXEの動作は、テーブルスキーマにどのような変更が加えられたかによって変わることに気付きました。

  1. テーブルの最後に新しい列を追加する:「テーブルが変更されました」
  2. テーブルからの列の削除:「テーブルが変更されました」
  3. 既存の列の間に列を追加するか、順序を変更するだけです:「テーブルの再作成が開始されました」

(私は自分で翻訳をしました、それらはおそらく不正確ですが似ています)。

ステップ3は、公開プロセス中に永遠にかかります。なぜ、正確に何が起こっているのだろうか。テーブル構造が完全に再作成されているのではないかと思います。私はこれを望まないでしょう、私は基本的に異なるターゲットシステムの列の順序についてあまり気にしません。この時間のかかるプロセスを防ぐ方法はありますか?

編集:

その間、多くの人が同じ問題に苦しんでいることがわかりました。 SSDTには、ターゲットテーブルの列順序を無視するオプションはありません。これにより、上記のようにすべてのデータが再到着します。これは時間がかかり、まったく役に立たないですが、SSDTを使用する場合は選択の余地がありません。

こちらをご覧になり、賛成してください。

Visual Studioユーザーボイスアイテム

Microsoft Connectアイテム

MSDNフォーラムディスカッション

1
Magier

正解です。列の順序を「再配置」する唯一の方法は、新しい構造でテーブルを作成し、古いデータをそのテーブルにプッシュし、古いテーブルを削除してから、新しいテーブルの名前を変更することです(またはそのバリエーション)。 。テーブル内のすべてのデータをコピーし、いくつかのドロップと名前を変更する必要があります。

3
paulbarbin

この時間のかかるプロセスを防ぐ方法はありますか?

確かにあります! 列の順序を気にするのをやめます。それが重要な場合は、前もって同じテーブルを複数回再デプロイしないように、価格を支払うか、設計に前もって時間を費やしてください。列の順序は「正しい」です。

SSMSは、テーブルデザイナを使用して列の順序を変更した場合とまったく同じことを行います。つまり、新しいテーブルを作成し、すべてのデータをコピーし、古いテーブルを削除して、新しいテーブルの名前を変更します。これは安くはありません-物理的なデータの移動には時間がかかり、そしてその移動を完全に記録する必要があります。

また、新しい列の物理的な場所を指定できるT-SQL/DDLコマンドがないことにも気付くでしょう。これは、SQLServerが再構築せずにサポートしていないためです。

とにかく、それは本当に重要ではないはずです。アプリケーションは、基礎となる物理的な実装に関係なく、必要な順序で列を要求するようにコーディングできます。これが怠惰な場合SELECT *スポットチェッカー、それらのビューを作成します。

2
Aaron Bertrand