我有一个查询为表中的每一行生成一个查询。
例如:
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'
等
是否可以执行结果集中的每一行而无需实现某种形式的游标/循环?
答案 0 :(得分:1)
您可以通过多种方式连接sql pass变量中的所有列值
作为示例:XMLPATH,STUFF或COALESCE,对字符串进行一些操作。
但仍然收到错误
此任务的主要问题是Go
所以如果您尝试执行动态sql包含Go
,则会引发下一个错误: -
Msg 102,Level 15,State 1,Line 4语法不正确' 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)
<强>结果: - 强>
答案 1 :(得分:0)
你可以声明一个变量,将查询(单独的)存储在其中并执行它
DECLARE @strQuery Varchar(MAX)
SET @strQuery = ''
select @strQuery = @strQuery +
'EXEC('' create proc [' + [ProcName] + ']
as
print ''''' + [ProcName] + '''''
'')'
from MyTable
EXEC(@strQuery)
--To view your query
PRINT(@strQuery)
注意:我为每个程序使用了Exec命令,因为它们无法在查询中同时执行