6

我想知道是否无论如何我可以将我的存储过程参数之一设置为可选。

IF @thing_id <> ''
BEGIN 
 SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' +  CONVERT(VARCHAR,@thing_id)
END
4

5 回答 5

16

创建存储过程时,像这样创建它

Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS

-- Your code here

GO

Param1 是强制性的

Param2 是可选的

于 2009-10-05T14:14:28.333 回答
9

为存储过程参数提供默认值将使其可选。

编辑:

创建过程 [ EDURE ] [ 所有者。]
程序名称 [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]

默认

是参数的默认值。如果定义了默认值,则无需为该参数指定值即可执行该过程。默认值必须是常量,也可以为 NULL。如果过程使用带有 LIKE 关键字的参数,它可以包含通配符(%、_、[] 和 [^])。

请参阅SQL Server 文档:指定参数默认值

于 2009-10-05T14:13:19.100 回答
5

是的。在参数列表末尾列出“可选”参数并给它们一个默认值(通常为 NULL):

CREATE PROCEDURE MyProcedure
    @param1 int,
    @param2 varchar(200),
    @thing_id int = NULL
AS

    If @thing_id IS NULL Begin
       /* ... */
    End

END
于 2009-10-05T14:14:26.150 回答
0

撇开代码带来的 SQL 注入乐趣不谈,是的,你可以。您可以为参数设置默认值

CREATE PROCEDURE DoStuff @param1 varchar(20) = null

然后在存储过程里面

IF @param1 IS NOT NULL
BEGIN
    ... Do stuff
END

您可以将默认值设置为您喜欢的任何值。

于 2009-10-05T14:16:04.787 回答
0
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int,
@MandatoryB varchar(50),
@MandatoryC datetime,
@OptionalA varchar(50) = NULL
)
AS

-- PUT YOUR DYNAMIC SQL HERE

GO

打电话

EXEC dbo.SQL_INJECTION @MandatoryA = 1, @MandatoryB = 'test', @MandatoryC = '2009-10-05', @OptionalA = DEFAULT

注 1:动态 SQL = SQL 注入

于 2009-10-05T14:16:11.313 回答