2010-09-30 4 views
5

Je souhaite disposer d'une procédure stockée qui mettra à jour les valeurs dans une ligne de table selon que les paramètres sont fournis ou non. Par exemple, j'ai une situation où je veux mettre à jour toutes les valeurs, mais aussi une situation où je suis seulement nécessaire pour mettre à jour deux valeurs. J'espérais pouvoir le faire avec une seule procédure, plutôt que d'en écrire deux, ce qui ne me plaît pas particulièrement. Le meilleur que je suis parvenu à trouver avec moi-même est quelque chose comme ce qui suit:Valeurs définies de façon conditionnelle dans l'instruction UPDATE

CREATE PROCEDURE dbo.UpdatePerson 
@PersonId INT, 
@Firstname VARCHAR(50) = NULL, 
@Lastname VARCHAR(50) = NULL, 
@Email VARCHAR(50) = NULL 
AS 
BEGIN 
    SET NOCOUNT ON 

UPDATE Person 
Set 
    Firstname = COALESCE(@Firstname, Firstname), 
    Lastname = COALESCE(@LastName, Lastname), 
    Email = COALESCE(@Email, Email) 
    WHERE PersonId = @PersonId 

END 

Je me rends compte que les valeurs seront mises à jour chaque fois que de toute façon, ce qui est idéal. Est-ce un moyen efficace d'y parvenir ou pourrait-il être mieux fait?

Répondre

4

Je pense que votre code est correct. La seule chose que je voudrais ajouter est une vérification pour le cas où les trois paramètres sont NULL, auquel cas aucune mise à jour ne devrait être faite.

4

SQL Server dispose d'une certaine logique pour gérer les mises à jour non mises à jour.

More details than you probably wanted to know!

+0

Article intéressant! – RedFilter

+0

+1 Article utile et informatif. Merci d'avoir partagé! –

+1

Merci Martin. Quelques informations utiles à connaître. –

Questions connexes