执行动态 sql 查询输出?

Execute dynamic sql query output?

平台:SQL服务器 2016

我写了一个 SQL 语句输出一系列 SQL 命令,我想在同一个脚本中执行这个查询的输出。这是构建我要执行的命令的查询。

select 
    'ALTER SCHEMA dbo TRANSFER SYSNET.' + name + ';' 
from 
    sys.tables  
where  
    schema_name(schema_id) = 'sysnet' 
order by 
    1;

我知道我需要将输出捕获到一个变量中然后执行它。我确信这很简单,但我尝试过的所有方法都没有用,Google 让我失败了。

============================================= =====

感谢您的回答! scsimon 在技术上给出了最佳答案,因为它提供了执行任何动态 SQL 输出的方法,而这正是我所要求的。话虽如此,Ross Bush 为我提供了完成转移架构所有权这一特定任务的最简单方法。最后我用了这个...

EXEC sp_MSforeachtable @command1='ALTER SCHEMA dbo TRANSFER ?;' 
  ,@whereand='AND schema_name(schema_id) = ''sysnet'''

只需循环遍历这些似乎就是您想要的。

select row_number() over (order by (select null)) as RN, 'ALTER SCHEMA dbo TRANSFER SYSNET.'+ name + ';' as CMD 
into #mytemp
from sys.tables  where  
schema_name(schema_id)  = 'sysnet' 


declare @sql varchar(max)
declare @i int = 1
while @i <= (select max(RN) from #mytemp)
begin
    select @sql = CMD from #mytemp where RN = @i
    print @sql
    --exec(@sql)
    set @i = @i + 1
end

drop table #mytemp

这不是最好的建议,因为下面的函数是一个未记录的 SQL 服务器函数,将来可能不会出现。也就是说,我会使用 sp_MSforeachtable table 为目标数据库中的每个 table 发出命令。

EXEC sp_MSforeachtable  'SELECT COUNT(*) FROM ?'