我想遍历一个表列表。对于每个表,我想运行一个更新查询。
伪代码:
ArrayOfTablesObjects = {['tablename1','fieldname1'],['tablename2','fieldname2']......} foreach @tablename in ArrayOfTablesObjects UPDATE @tablename SET @fieldname = 'xyz' WHERE @fieldname = '123' end foreach
感谢Harpo的回答。我已经使用该想法来构建以下sql语句。我们有许多表50+,它们都具有相同的数据类型(员工ID),但字段名称可能不同。因此,根据表名称,要更新的字段将有所不同。我实际的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