gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:24:52 25 4
gpt4 key购买 nike

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

具体来说,我尝试过:

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'

因此过程 call_it 应该使用参数“a”和“b”调用过程 test。

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

Msg 2812, Level 16, State 62, Procedure call_it, Line 6 Could not find stored procedure 'test 'a','b''.

但是,运行测试“a”、“b”效果很好。

最佳答案

你需要括号

exec (@sp_str)

如果过程不存在,消息将是这样的

消息 2812,第 16 级,状态 62,第 1 行找不到存储过程“test”。

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

虽然 SQL 注入(inject)仍然是一个坏主意,但请尝试使用 sp_executeSQL 并使用参数,请参阅此处有关查询计划重用的信息:Changing exec to sp_executesql doesn't provide any benefit if you are not using parameters correctly

关于sql - 从另一个存储过程动态调用一个存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com