【发布时间】:2018-05-25 09:43:38
【问题描述】:
我想在不使用游标或循环的情况下为表的每一行执行存储过程。 假设我的表 dbo.User 包含以下用户的名称:
create table dbo.test_User (
Name varchar(50) )
insert into dbo.test_User
values ('Deepanshu'),('IronMan'),('DoctorStrange')
我创建了一个只显示用户名的存储过程(虽然我真正的存储过程要做很多事情)
create procedure dbo.usp_TestSP ( @name varchar(50) )
as
BEGIN
select @name
END
现在我希望为所有名称运行存储过程,例如:
EXEC dbo.usp_TestSP 'Deepanshu';
EXEC dbo.usp_TestSP 'IronMan';
EXEC dbo.usp_TestSP 'DoctorStrange';
我创建了一个字符串变量@Query,它将存储我要执行的 t-sql 查询
DECLARE @Query varchar(200);
select @Query=STUFF(
(select 'dbo.usp_TestSP '''+Name+''';'
from dbo.test_user
FOR XML PATH('')
),1,0,''
)
EXEC @Query
当我尝试执行此@Query 时,它给了我一个错误提示:
在 sys.servers 中找不到服务器“dbo”。验证是否指定了正确的服务器名称。如有必要,执行存储过程 sp_addlinkedserver 将服务器添加到 sys.servers。
如何使用字符串变量@Query 为所有名称执行存储过程?
【问题讨论】:
-
感谢您的回答,但正如我所提到的,我想在没有光标或循环的情况下执行此操作,使用与上面显示的相同的逻辑
-
您只是缺少文字中的 EXEC 命令。
EXEC dbo.usp_TestSP ...
标签: sql sql-server tsql stored-procedures