Table1 と Table2 の 2 つのテーブルがあり、N 番号がありません。列の。Table2 に基づいて Table1 を更新する必要があります。Table2 の 1 つの列にリストされている Table1 のすべての列を更新したいと考えています。
例えば
Table1 A B C D E . . .
1 2 3 4 5 . . .
7 6 5 4 3 . . .
Table2 X Y Col_Nam Col_Value
1 2 C 8
1 2 D 9
7 6 E 10
7 6 C 20
. . . .
. . . .
次の条件 Table1.A = Table2.X および Table1.B = Table2.Y に一致する場合、Table2 にリストされている Table1 のすべての列を更新します。
プラットフォームは SQL Server です。私が探しているのは、更新しようとしている列名がわからないため、動的なソリューションです。Table1 には N 個の番号を指定できます。更新が必要な列の。Cursorを使用して次のことを試しました。
DECLARE @s Varchar(MAX), @key1 VARCHAR(MAX), @key2 VARCHAR(MAX), @Cname VARCHAR(MAX), @CValue VARCHAR(MAX)
DECLARE crs CURSOR FOR SELECT * FROM Table2
OPEN crs;
FETCH NEXT FROM crs inTO @key1,@key2,@Cname,@Cvalue;
WHILE @@FETCH_STATUS = 0
BEGIN
set @s =
'Update T1 SET ' + @FieldName + ' = ''' + @FieldValue +
''' from Table1 T1' +
' where T1.A = ''' + @key1 +
''' and T1.B = ''' + @key2
exec(@s)
FETCH NEXT FROM crs inTO @key1,@key2,@Cname,@Cvalue;
END
CLOSE crs
DEALLOCATE crs
どういうわけか機能していないので、where 条件に一致しないすべてのレコードにデフォルト値を設定したいと考えています。
他の解決策や助けをいただければ幸いです。