2011-08-12 14 views
2

テーブルの1つの行が誤って上書きされました。私はテーブルのバックアップを持っており、メインテーブルの1つの行をバックアップデータで更新する必要があります。問題は、テーブルがほぼ100列あることです。これを手動で書き出す必要がないように、SQL Serverでこれを行う簡単な方法はありますか?名前列名を持つ別のテーブルに基づくテーブルの100列の行のSQLを更新します。

すべての方法で100番目の列までです。 SQL Server Management Studioは、他のテーブルの同じ名前のフィールドを使用してフィールドを更新することがわかっていると思います。これを行う方法はありますか?

ありがとうございます。

答えて

5
INSERT INTO MainTable 
SELECT * 
FROM BackUpTable 
WHERE RowID = GoodRow 

DELETE FROM MainTable 
WHERE RowId = BadRow 

「良い」行を挿入して「不良」行を削除するだけです。

PK制約がある場合は、逆の順序で削除/挿入できます。

これをTRANSACTIONで囲むことも賢明でしょう。

+0

プライマリキーがID列の場合はどうなりますか?次のエラーが表示されます: "IDENTITY_INSERTがOFFに設定されていると、テーブル 'メンバー'のID列に明示的な値を挿入できません。 – Ojen

+0

もしそれが 'identity'ならば明示的な列リストを使う必要があります。その周りにはありません。 – JNK

1

SSMSでは、オブジェクトエクスプローラのcolumnsノードをクエリウィンドウにドラッグアンドドロップできます。すべての列のコンマ区切り文字列が生成されます。

+1

+1 - 良い点。しかし、まだ更新のための構文を書くのにPITAでしょうか? – JNK

+0

@JNK - そうです。挿入時に使用すると便利です。 –

0
> declare @aa varchar (max) set @aa = '' 
> 
> select @aa = 
>  (case when @aa = '' 
>  then column_name 
>  else @aa + coalesce(', ' + column_name+'= '+column_name, '') 
>  end) from amicus.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'People' print @aa