从另一个存储过程动态调用存储过程

Gre*_*reg 6 sql t-sql sql-server stored-procedures sql-server-2005

我希望能够将存储过程的名称作为字符串传递到另一个存储过程,并使用动态参数调用它.我收到了一个错误.

具体来说,我尝试过:

create procedure test @var1 varchar(255), @var2 varchar(255) as
    select 1

create procedure call_it @proc_name varchar(255)
    as
    declare @sp_str varchar(255)
    set @sp_str = @proc_name + ' ''a'',''b'''
    print @sp_str
    exec @sp_str

exec call_it 'test'
Run Code Online (Sandbox Code Playgroud)

因此,过程call_it应该使用参数'a'和'b'调用过程测试.

当我运行上面的代码时,我得到:

消息2812,级别16,状态62,过程call_it,第6行无法找到存储过程'test'a','b''.

但是,运行测试'a','b'工作正常.

SQL*_*ace 8

你需要括号

exec (@sp_str)
Run Code Online (Sandbox Code Playgroud)

如果proc不存在,那么消息就是这个

Msg 2812,Level 16,State 62,Line 1 无法找到存储过程'test'.

不会找不到存储过程'test'a','b''

尽管使用SQL注入仍然是一个坏主意,但请尝试使用sp_executeSQL并使用参数,请参阅此处有关查询计划重用的信息:如果未正确使用参数,则将exec更改为sp_executesql不会带来任何好处