2010-08-16 5 views
2

Comment est-ce que je peux modifier la procédure stockée de mise à jour si le développeur veut définir seulement Size alors il ne doit pas passer TimeStamp. De plus, alors quel sera le code d'exécution de cette procédure?Comment mettre à jour la procédure stockée a un paramètre facultatif?

Scénario:

Mise à jour TimeStamp = getdate() champ dont SizeID = 1 ET Size =Large

Note: Ce champ Paramètres et paramètres de condition doivent être dynamiques et optionals comme dans où TimeStamp peuvent également être fournis.

Mise à jour procédure stockée:

ALTER PROCEDURE [dbo].[SP_Sizes_Update] 

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

AS 

Update Sizes 

Set 
    Size = @Size, 
    TimeStamp = @TimeStamp 
Where 

SizeID = @SizeID 

Répondre

3

Il suffit de régler le paramètre à une valeur par défaut, comme ceci:

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 

cependant, si vous voulez la valeur par défaut à la suite d'une appel de fonction, vous pouvez utiliser une valeur spéciale qui sera remplacée par le trou de fonction, comme ceci:

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, bien que quelque chose nommé @TimeStamp, je serais probablement mis la valeur par défaut à getDate(). – SirDemon

+0

@SirDemon - vous ne pouvez pas utiliser GETDATE() comme valeur de paramètre par défaut, doit être une constante – AdaTheDev

+0

@Ada - Je pense que SirDemon parlait de définir la valeur par défaut de la colonne dans la table comme Getdate(), cependant, cela ne fonctionnera pas avec les appels de mise à jour. – SWeko

4

une façon

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 pour plus concis – AdaTheDev

Questions connexes