を、あなたは一時テーブルから毎回エントリを削除する場所それを処理する。
テーブル名をクエリに渡す方法として、動的SQLクエリを作成せずに行う方法はありません。あなたは、正しい場所にテーブル名を連結して文字列でクエリを作成することでそれを行います。スペースや奇妙な文字がある場合は、QUOTENAME
関数を使用して名前のクォートを実行します。カーソルで
例:あなたはこのために、ループを使用する必要はありません
DECLARE @tables TABLE (
Name SYSNAME
);
DECLARE @tableName SYSNAME;
DECLARE @sql NVARCHAR(4000);
INSERT INTO @tables
SELECT i.table_name
FROM INFORMATION_SCHEMA.COLUMNS i
WHERE i.column_name = 'fieldA';
DECLARE cur CURSOR LOCAL FAST_FORWARD
FOR
SELECT Name
FROM @tables;
OPEN cur;
FETCH NEXT FROM cur
INTO @tableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'ALTER TABLE ' + QUOTENAME(@tableName) + N' ADD new_col varchar(8);';
SET @sql = @sql + N'UPDATE ' + QUOTENAME(@tableName) + N' SET new_col = old_col;';
EXEC sp_executesql @sql;
FETCH NEXT FROM cur
INTO @tableName;
END
CLOSE cur;
DEALLOCATE cur;
Hmm ... DMLクエリでDDLを実行できる場合は...実際には、私はあなたができないと確信しています。 –
動的SQLを使用する必要があります –
なぜ新しい列を追加して別の列と同じ値に設定するのですか?これは、同じデータを持つ2つの列を持つのは馬鹿げているようです。おそらくあなたは古い列をドロップするだろうか?単純にこれらの列の名前を変更することも可能です。 –