Nar*_*ade 28 sql stored-procedures optional-parameters sql-server-2008
我正在开发一个框架,其中我是一个动态创建参数的调用存储过程.我正在运行时构建参数集合.
当我将参数传递给存储过程时,会出现问题,但存储过程不接受此类参数.
例如,我的存储过程是:
CREATE PROCEDURE GetTaskEvents
@TaskName varchar(50)
AS
BEGIN
-- SP Logic
END
Run Code Online (Sandbox Code Playgroud)
将存储过程称为:
EXEC GetTaskEvents @TaskName = 'TESTTASK', @ID = 2
Run Code Online (Sandbox Code Playgroud)
这会抛出以下错误:
Msg 8144, Level 16, State 2, Procedure GetTaskEvents, Line 0
Procedure or function GetTaskEvents has too many arguments specified.
Run Code Online (Sandbox Code Playgroud)
这在Sybase ASE中运行良好,它只是忽略任何其他参数.这可以用MSSQL server 2008实现吗?任何帮助,非常感谢.谢谢
Yuc*_*uck 39
SQL Server不允许您将参数传递给尚未定义的过程.我认为最接近这种设计的方法是使用可选参数,如下所示:
CREATE PROCEDURE GetTaskEvents
@TaskName varchar(50),
@ID int = NULL
AS
BEGIN
-- SP Logic
END;
Run Code Online (Sandbox Code Playgroud)
您需要包含可能在定义中使用的每个可能参数.然后您可以自由地调用该过程:
EXEC GetTaskEvents @TaskName = 'TESTTASK', @ID = 2;
EXEC GetTaskEvents @TaskName = 'TESTTASK'; -- @ID gets NULL here
Run Code Online (Sandbox Code Playgroud)
为什么要将参数传递给不使用它的存储过程?
听起来对你来说,你可能更善于构建动态SQL语句然后执行它们.你试图用SP做什么是行不通的,即使你可以改变你正在做的事情以适应不同数量的参数,你基本上会使用动态生成的SQL来破坏你的目的.首先拥有/使用SP.SP有一个角色,但在所有情况下都没有解决方案.
| 归档时间: |
|
| 查看次数: |
253579 次 |
| 最近记录: |