我想知道是否无论如何我可以将我的存储过程参数之一设置为可选。
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
我想知道是否无论如何我可以将我的存储过程参数之一设置为可选。
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
创建存储过程时,像这样创建它
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
Param1 是强制性的
Param2 是可选的
为存储过程参数提供默认值将使其可选。
编辑:
创建过程 [ EDURE ] [ 所有者。]
程序名称 [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]默认
是参数的默认值。如果定义了默认值,则无需为该参数指定值即可执行该过程。默认值必须是常量,也可以为 NULL。如果过程使用带有 LIKE 关键字的参数,它可以包含通配符(%、_、[] 和 [^])。
是的。在参数列表末尾列出“可选”参数并给它们一个默认值(通常为 NULL):
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
撇开代码带来的 SQL 注入乐趣不谈,是的,你可以。您可以为参数设置默认值
CREATE PROCEDURE DoStuff @param1 varchar(20) = null
然后在存储过程里面
IF @param1 IS NOT NULL
BEGIN
... Do stuff
END
您可以将默认值设置为您喜欢的任何值。
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 注入