执行动态 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 ?'
平台: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 ?'