小编典典

动态SQL中的循环

sql

我有想要应用于多个表的代码,而不是简单地复制和替换表名,而是想使用某种循环或游标来简化代码。

我设想设置一个表名数组,并使用索引遍历该列表,检索每个表名,并在适用于我的代码的情况下使用动态SQL散布表名。

据我所知,由于在SQL中没有“数组”构造,因此我不确定这将如何工作。

关于如何解决这个问题的任何想法?


阅读 223

收藏
2021-04-17

共1个答案

小编典典

这是一种实现方法:

--Declare a table variable to hold your table names (and column names in case needed)
declare @listOfTablesToUpdate table (tableName varchar(100), columnNameToUpdate varchar(50))

--insert the tables that you want to work with.
insert into @listOfTablesToUpdate values ('Table1', 'column2')
insert into @listOfTablesToUpdate values ('Table2', 'column3')
insert into @listOfTablesToUpdate values ('Table3', 'column4')

--Cursor for iterating
declare @tableCursor cursor,
        @tableName varchar(100),
        @columnName varchar(50)

set @tableCursor = cursor for select * from @listOfTablesToUpdate

open @tableCursor
fetch next from @tableCursor into @tableName, @columnName
while(@@fetch_status = 0)
begin
    --dynamic sql
    declare @sql varchar(max)

    --Your logic here...this is just an example
    set @sql = 'update '+@tableName+' set '+@columnName+' = '+<value>+' where '+@columnName +' = '+<someothervalue>
    exec @sql

    fetch next from @tableCursor into @tableName, @columnName
end

close @tableCursor
deallocate @tableCursor
2021-04-17