2010-08-16 92 views
2

如何修改更新存储过程,以便开发人员只需设置Size,那么他/她不需要通过TimeStamp。而且,那么这个过程将执行什么代码?更新存储过程如何具有可选参数?

场景:

更新TimeStamp = getdate()领域,其SizeID = 1Size =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 

回答

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 
+0

+1,尽管对于名为@TimeStamp的东西,我可能会将默认值设置为getdate()。 – SirDemon 2010-08-16 14:37:32

+0

@SirDemon - 你不能使用GETDATE()作为默认参数值,必须是一个常量 – AdaTheDev 2010-08-16 14:38:51

+0

@Ada - 我想SirDemon正在讨论将表中列的默认值设置为Getdate(),但是,这将不适用于更新调用。 – SWeko 2010-08-16 14:41:04

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 
+0

+1更简洁 – AdaTheDev 2010-08-16 14:40:04