Как обновление хранимой процедуры имеет необязательный параметр? - PullRequest
2 голосов
/ 16 августа 2010

Как я могу изменить обновленную хранимую процедуру, чтобы, если разработчик захотел установить только 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 ]

4 голосов
/ 16 августа 2010

в одну сторону

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
3 голосов
/ 16 августа 2010

Просто установите для параметра значение по умолчанию, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...