更新存储过程如何具有可选参数?

时间:2010-08-16 14:29:13

标签: sql sql-server tsql stored-procedures

如何更改更新存储过程,以便开发人员只想设置Size,然后他/她不需要传递TimeStamp。那么,这个程序的执行代码是什么?

情境:

更新TimeStamp = getdate()SizeID = 1

Size =Large字段

注意:此字段参数和条件参数必须是动态的,并且也可以提供TimeStamp中的选项。

更新存储过程

ALTER PROCEDURE [dbo].[SP_Sizes_Update]

@SizeID    int,
@Size    varchar(50),
@TimeStamp    datetime

AS

Update Sizes

Set
    Size = @Size,
    TimeStamp = @TimeStamp
Where

SizeID = @SizeID

2 个答案:

答案 0 :(得分:4)

单程

ALTER PROCEDURE [dbo].[SP_Sizes_Update]
  @SizeID    int,
  @Size    varchar(50) = 'Large',
  @TimeStamp    datetime = null
AS
  Update Sizes
  Set
   Size = @Size,
   TimeStamp = coalesce(@TimeStamp,getdate())
  Where
   SizeID = @SizeID

答案 1 :(得分:3)

只需将参数设置为默认值,如下所示:

ALTER PROCEDURE [dbo].[SP_Sizes_Update]
  @SizeID    int,
  @Size    varchar(50),
  @TimeStamp    datetime = null
AS
  Update Sizes
  Set
   Size = @Size,
   TimeStamp = @TimeStamp
  Where
   SizeID = @SizeID

但是,如果您希望默认值是函数调用的结果,您可以使用一些将被函数孔替换的特殊值,如下所示:

ALTER PROCEDURE [dbo].[SP_Sizes_Update]
  @SizeID    int,
  @Size    varchar(50),
  @TimeStamp    datetime = null
AS
  if @TimeStamp is null
   set @TimeStamp = getdate()

   Update Sizes
   Set
     Size = @Size,
     TimeStamp = @TimeStamp
   Where SizeID = @SizeID