Спасибо Harpo за ваш ответ. Я использовал эту идею для построения следующего оператора SQL. У нас есть много таблиц 50+, которые имеют одинаковый тип данных (идентификатор сотрудника), но это имя поля может отличаться. Таким образом, в зависимости от имени таблицы поле, которое будет обновлено, будет другим. Мои настоящие операторы WHERE и SET более сложны, чем этот пример, но это не важно для этой проблемы.
Сначала я создаю временную таблицу для хранения таблицы / полей, которые я хочу обновить.
Затем я перебираю эти записи и генерирую SQL. Для тех из вас, кому не нравится динамический sql, вы можете просто использовать оператор print, а затем скопировать его в другое окно запроса и выполнить его. Или вы можете позвонить в оператор EXEC.
Я бы хотел принять ваши ответы, но потом не совсем ответил на мой вопрос, отчасти потому, что я не объяснил себя полностью. В любом случае, спасибо за вашу помощь.
DECLARE @TableFieldDictionary TABLE
(
tablename VARCHAR(100),
fieldname varchar(100)
)
insert into @TableFieldDictionary(tablename,fieldname) values ('table1','field1');
insert into @TableFieldDictionary(tablename,fieldname) values ('table2','field2');
--put more insert statements here. In my case, I have 50 inserts
declare cursor_dictionary cursor
for select tablename, fieldname from @TableFieldDictionary
open cursor_dictionary
declare @looptablename VARCHAR(100)
declare @loopfieldname varchar(100)
fetch next from cursor_dictionary
into @looptablename,@loopfieldname
DECLARE @UpdateSql AS varchar(max)
WHILE @@FETCH_STATUS = 0
BEGIN
SET @UpdateSql = 'UPDATE ' + @looptablename +
' SET ' + @loopfieldname + ' = 123' +
' WHERE ' + @loopfieldname + ' = 456'
print @updatesql
--EXEC(@updatesql)
fetch next from cursor_dictionary
into @looptablename,@loopfieldname
END
CLOSE cursor_dictionary
DEALLOCATE cursor_dictionary