我想知道是否有反正我可以将我的一个存储过程参数设置为可选。SQL Server:存储过程中的可选变量
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
我想知道是否有反正我可以将我的一个存储过程参数设置为可选。SQL Server:存储过程中的可选变量
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
向存储过程参数提供默认值将使其成为可选参数。
编辑:
CREATE PROC [EDURE] [所有者。 ]
procedure_name [;数]
[{@parameter DATA_TYPE}
[VARYING] [=缺省] [OUTPUT]
] [,... n]的默认
是该参数的默认值。 如果定义了默认值,则可以在不指定该参数的 值的情况下执行过程 。默认 必须是常量或可以是NULL。 如果过程使用带有LIKE关键字的参数,它可以包含通配符(%, _,[]和[^])。
请参阅 - http://msdn.microsoft.com/en-us/library/aa258259%28SQL.80%29.aspx
是。列表中的参数列表的末尾“可选”的参数,并给他们一个默认值(通常为NULL):
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
当您创建存储过程,创建这样
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
参数1时强制性
参数2是可选
谢谢拉吉。这很容易 – 2017-07-19 02:26:22
撇开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注入
“动态SQL = SQL注入”不一定是真的。这取决于您是否使用用户提供的值来构建动态SQL字符串。您可以轻松地在存储过程中基于逻辑构建动态SQL字符串,然后通过参数将用户提供的值传递到动态语句中。OP的代码已经开放给SQL注入,但并非所有的动态SQL都是。 – nicko 2016-02-25 18:55:41
@Joel:是否有必要拥有可选参数,朝着结束了吗?我认为,从可用性的角度来看最好。是对的吗? – shahkalpesh 2009-10-05 14:18:32
不,但绝对是最佳做法。 – 2009-10-05 14:27:47