执行动态SQL查询输出?

时间:2018-06-20 16:38:30

标签: sql-server dynamic-sql

平台:SQL Server 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输出的方法,而这正是我所要求的。话虽如此,罗斯·布什为我提供了最简单的方法来完成这项转移架构所有权的特定任务。最后我用了这个...

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

2 个答案:

答案 0 :(得分:0)

仅遍历这些似乎就是您想要的。

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

答案 1 :(得分:0)

这不是最佳建议,因为下面的函数是未记录的SQL Server函数,将来可能不会出现。话虽如此,我将使用sp_MSforeachtable表为目标数据库中的每个表发出命令。

EXEC sp_MSforeachtable  'SELECT COUNT(*) FROM ?'