をにする必要がある場合は、sp_msforeachtableを使用すると、列の存在に基づいて条件付きでコードを実行できます。
いっそ
exec sp_msforeachtable '
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMS WHERE COLUMN_NAME =''Col1'' AND TABLE_NAME = ''?'')
BEGIN
UPDATE ? SET Col1=
case when Col1 = "ppp" then "qqq"
when Col1 = "aaa" then "xxx"
end
END
'
か、すなわち:
DECLARE @myScripts TABLE(
id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
sql VARCHAR(max)
)
DECLARE @max INT,
@i INT,
@SQL VARCHAR(MAX)
INSERT INTO @myscripts(sql)
SELECT 'UPDATE [' + tablename + '] SET Col1=
case when Col1 = "ppp" then "qqq"
when Col1 = "aaa" then "xxx"
end'
FROM [INFORMATION_SCHEMA].TABLES WHERE TABLE_NAME IN ('table1','table2','table3','table4')
SELECT @max = @@ROWCOUNT, @i = 1
WHILE @i <= @max
BEGIN
SELECT @SQL = Script
FROM @myScripts
WHERE ID = @i
EXEC sp_executesql @statement = @SQL
SET @i = @i + 1
END
sp_msforeachtableを使用する代わりにWHILEループを作成します.... –
なぜですか?何かに力を入れようとするのではなく、何が効いているのか。リアルタイムアプリのリファレンスが何であるか分かりません。 –