Nei*_*l P 6 sql sql-server sql-server-2012
我有一个查询,它为表中的每一行生成一个查询。
例如:
select ' create proc ['+[ProcName]+'] as
print '''+[ProcName]+''''
from MyTable
Run Code Online (Sandbox Code Playgroud)
这个查询的结果会给我一个 sql 语句,我可以为表中的每一行数据执行。
CREATE PROC [proc_1]
AS
PRINT 'proc_1'
Run Code Online (Sandbox Code Playgroud)
——
CREATE PROC [proc_2]
AS
PRINT 'proc_2'
Run Code Online (Sandbox Code Playgroud)
等等。
是否可以执行结果集中的每一行而不必实现某种形式的游标/循环?
您可以通过多种方式连接 sql 传递变量中的所有列值
例如:XMLPATH、STUFF或COALESCE,以及对字符串的一些操作。
但仍然出现错误
此任务的主要问题是Go
Go是无效的 T-SQL
因此,如果您尝试执行动态 sql contains Go,将引发下一个错误:-
消息 102,级别 15,状态 1,第 4 行“go”附近的语法不正确。
在浏览 stackoverflow 后,我在这里得到了解决:-
所以获取下一个演示(在我的试验中应用上述链接后):-
演示:-
-- 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)
Run Code Online (Sandbox Code Playgroud)
结果:-