这是在存储过程中使用可选参数的正确方法吗?

njj*_*j56 3 sql-server stored-procedures

我有一个非常大的应用程序,它会让你很难改变对这个过程的每次调用,因此我试图为该过程创建一个可选参数.以下是该程序的前两行

ALTER PROCEDURE [dbo].[sp_get_entity_list]
@entityid int , @entitycat int, @adminTab bit = 0, @root int = 0
Run Code Online (Sandbox Code Playgroud)

在代码中调用过程时,通常会调用它

"EXEC sp_get_entity_list " & EntityID & ", " & EntityCAT 
Run Code Online (Sandbox Code Playgroud)

但在少数情况下,我需要传递一个位类型参数来显示它来自不同的位置 - 我通过使用来调用它

"EXEC sp_get_entity_list " & EntityID & ", " & EntityCAT & ",1"
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我不确定这是否是传递可选参数的正确方法,我希望将adminTab设置为false(或null,无关紧要),除非我传递可选参数.谢谢.

Cur*_*urt 6

我认为在执行存储过程时包含每个参数的名称更好:

EXEC sp_get_entity_list @entityid=" + EntityID + ", @entitycat=" + EntityCAT
Run Code Online (Sandbox Code Playgroud)

这意味着SQL确切地知道您所引用的参数.

因此,如果您有可选参数,则不需要包含每一个参数,如果您希望使用默认值:

EXEC sp_get_entity_list @EntityID=" & EntityID & ", @root=1
Run Code Online (Sandbox Code Playgroud)