Procédure stockée si l'logging existe puis mise à jour

J'essaie de vérifier si un logging existe et ensuite le mettre à jour s'il le fait

Voici ce que j'ai actuellement: (Ce qui ne marche évidemment pas)

CREATE PROCEDURE dbo.update_customer_m @customer_id INT , @firstname VARCHAR(30) , @surname VARCHAR(30) , @gender VARCHAR(6) , @age INT , @address_1 VARCHAR(50) , @address_2 VARCHAR(50) , @city VARCHAR(50) , @phone VARCHAR(10) , @mobile VARCHAR(11) , @email VARCHAR(30) , AS IF EXISTS ( SELECT * FROM dbo.Customer WHERE CustID = @customer_id ) BEGIN UPDATE dbo.Customer SET Firstname = @firstname, Surname = @surname, Age = @age, Gender = @gender, Address1 = @address_1, Address2 = @address_2, City = @city, Phone = @phone, Mobile = @mobile, Email = @email WHERE CustID = @customer_id END 

Y a-t-il une meilleure façon de faire cela qui fonctionne?

Pourquoi les deux vérifient d'abord? La mise à jour ne mettra à jour aucune ligne si la ligne n'existe pas:

  UPDATE dbo.Customer SET Firstname = @firstname, Surname = @surname, Age = @age, Gender = @gender, Address1 = @address_1, Address2 = @address_2, City = @city, Phone = @phone, Mobile = @mobile, Email = @email WHERE CustID = @customer_id; 

Le if n'est pas nécessaire.

si le bloc n'est pas nécessaire, select d'abord si n'a pas de ligne, le bloc de mise à jour ne fait rien et aucune ligne n'est affectée.

il suffit d'écrire votre mise à jour dans cette procédure.

mais peut-être que vous voulez écrire autre si pour cette procédure, si c'est OK, vous pouvez vous IF et ELSE. dans le bloc IF, vous pouvez écrire cette mise à jour, et dans le bloc ELSE, vous pouvez en faire une autre.

 SELECT * FROM dbo.Customer WHERE CustID = @customer_id //add this IF @@ROWCOUNT>=1 BEGIN UPDATE dbo.Customer SET Firstname = @firstname, Surname = @surname, Age = @age, Gender = @gender, Address1 = @address_1, Address2 = @address_2, City = @city, Phone = @phone, Mobile = @mobile, Email = @email WHERE CustID = @customer_id END