Wil*_*rdi 4 sql-server stored-procedures
我有一些关于在SQL Server中执行存储过程的案例.
也许这是不寻常的做法,但我已经在表格中存储了一个存储过程名称列表.这个表是这样的(让我们称之为TableFoo):
| SPId | SPName |
-------------------
| 1 | spr_name1|
| 2 | spr_name2|
| 3 | spr_name3|
| 4 | spr_name4|
...
Run Code Online (Sandbox Code Playgroud)
我想调用/执行从查询结果生成的存储过程列表TableFoo,查询大致如下:
SELECT SPName
FROM TableFoo
WHERE SPId IN (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
我想按行顺序执行存储过程
我的意思是我想这样做:)
SELECT EXEC(SpName)
FROM TableFoo
WHERE SPId IN (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
但这不起作用
这是除了使用CURSOR?之外的任何解决方案?
提前致谢.
使用字符串聚合构建一个调用所有过程的批处理,然后运行此批处理.有许多字符串聚合连接方法,但最有效的方法之一是XML黑盒方法:
create table #test (spid int, sproc sysname);
insert into #test (spid, sproc) values (1, N'sproc1')
, (2, N'sproc2')
, (3, N'sproc3')
, (4, N'sproc4')
, (5, N'sproc5')
, (6, N'sproc6');
declare @sql nvarchar(max);
set @sql = (select N'exec ' + sproc +N';
' from #test
where spid in (1,3,5) for XML path(''), type).value(N'.', 'nvarchar(max)');
exec sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3862 次 |
| 最近记录: |