2017-02-09 9 views
0

私は、私の同僚の誰かがいつでも完了している手作業のプロセスを調べるように求められました。列を追加する - SQL Serverテーブル

大規模なテーブル(2億行)に新しい列を追加する必要がある場合があります。これを行うには1時間以上かかることがあります。尋ねる前に、はい、列はNULL可能ですが、新しい列に90%のデータが入ることがあります。古いテーブルから

代わりに、既存のテーブルに新しい列を追加するので、彼...

  1. 新しいテーブル
  2. を作成を選択(*)(新への挿入)
  3. は、新たに追加します列をスクリプトの一部として追加します

次に、古いテーブルを削除し、新しいテーブルの名前を元の名前に戻し、インデックスを追加してから圧縮します。彼はそれをはるかに速く言う。

これは、私がしようとすると何かアドバイスは大歓迎です

プロセスをよりシームレスに作ってみると、SSISパッケージを作成します最良の方法である場合は!

おかげ

+0

ソーステーブルは更新されますか? –

+0

はい - ソーステーブルは毎月更新されますが、すぐに毎週に変更されます – Easy987us

+0

なぜ新しいカラムを頻繁に追加していますか?これは、データ構造を少し標準化したものに少し変更することで、おそらくもっとうまく解決できます。テーブル定義と新しい列の理由を投稿できますか? – iamdave

答えて

0

は、新しいテーブル構造を作成し、そのテーブルにすべてのデータを移動し、前にテーブルを削除し、わずか数データのための良い方法です、あなたはSQL Serverでウィザードによってそれを行うことができます。
しかし、それはこの問題(数百万のデータ)を解決する最悪の方法です。

大量のデータ(数百万のレコード)の場合は、「テーブルの変更」を使用する必要があります。

Alter Table MyTable
ADD NewColumn nvarchar(10) null

新しい列が最後の列としてテーブルに追加されます。 このスクリプトを使用すると、すべてのデータが移動しないので1秒もかかりません。テーブルに新しい列を追加するだけです。

ただし、何百万ものデータレコードで前述したようにウィザード方式を使用すると、時間がかかります。

0

アリは、データの90%を埋めるために、その後

alter Table MyTable ADD NewColumn nvarchar(10) null

を言うけどよう。彼はすでにそれを持つテーブルを持っており、彼はコピーでの参加の重要なので、これは彼が必要とするすべてであるよう:

UPDATE MyTable 
SET [NewColumn] = b.[NewColumn] 
FROM MyTable a INNER JOIN NewColumnTable b ON a.[KeyField]= b.[KeyField] 

がたくさん速くなります。あなたはSSISでそれを行うことができますが、これは多くの場合、実際にはSQLの数行の価値がない場合に起こります。

関連する問題