对没有循环的结果集中的所有行执行动态sql

我有一个查询,为表中的每一行生成一个查询.

例如:

select ' create proc ['+[ProcName]+'] as 
       print '''+[ProcName]+''''
from MyTable

这个查询的结果将给我一个sql语句,我可以为表中的每一行数据执行.

    CREATE PROC [proc_1]
AS
    PRINT 'proc_1'

CREATE PROC [proc_2]
AS
    PRINT 'proc_2'

等等

是否可以执行结果集中的每一行而无需实现某种形式的游标/循环?

最佳答案 您可以通过多种方式连接sql pass变量中的所有列值

例如:XMLPATH,STUFFCOALESCE,使用字符串进行一些操作.

但仍然出错

此任务的主要问题是Go

Go是Not-Valid T-SQL

所以如果你尝试执行动态sql包含Go,则会引发下一个错误: –

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ‘go’.

浏览stackoverflow后,我在这里得到解决: –

Execute Dynamic Query with go in sql

所以获取下一个演示(在我的试验中应用上述链接后): –

演示: –

-- Try to create 4 procedures proc_1, proc_2 , proc_3 and proc_4
Create database Demo
go
use Demo
go

Create table MyTable (procName varchar (200))
go
insert into MyTable values ('proc_1')
go
insert into MyTable values ('proc_2')
go
insert into MyTable values ('proc_3')
go
insert into MyTable values ('proc_4')
go

declare @Query nvarchar(max)
SELECT @Query = isnull(@Query,'') + 'create proc ['+[ProcName]+'] as 
print '''+[ProcName]+''''+ char (10) + '
Go
'
FROM MyTable 
--print @Query
SET @Query = 'EXEC (''' + REPLACE(REPLACE(@Query, '''', ''''''), 'GO', '''); EXEC(''') + ''');'
EXEC (@Query)

结果:-

《对没有循环的结果集中的所有行执行动态sql》

《对没有循环的结果集中的所有行执行动态sql》

点赞