Sql server - une proc stock faisant soit un update soit un insert

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 196 fois - Téléchargée 34 fois

Contenu du snippet

Il est souvent très pratique de n'avoir qu'une seule procédure qui gère soit l'update des informations si elle existe déja, soit l'Insert des informations.
C'est donc une évolution de la Procédure stockée montrée ici :
- http://www.sqlfr.com/code.aspx?ID=26572

Source / Exemple :


CREATE   PROCEDURE dbo.AddOrUpdateUser
(
	@Login as nvarchar(15),
	@Nom as nvarchar(25),
	@Prenom as nvarchar(25),
	@Email as nvarchar(50),
	@Telephone as nvarchar(10)
)
AS

IF exists(SELECT USER_ID FROM dbo.TABLE_USERS WHERE (dbo.TABLE_USERS.USER_LOGIN = @Login))
-- Dans cette partie, le Compte existe déja, on a donc juste besoin de rafraichir les Informations
	BEGIN
		UPDATE 
			dbo.TABLE_USERS
		SET 	
			dbo.TABLE_USERS.USER_NOM = @Nom,
			dbo.TABLE_USERS.USER_PRENOM = @Prenom,
			dbo.TABLE_USERS.USER_EMAIL = @Email,
			dbo.TABLE_USERS.USER_TEL = @Telephone
		WHERE 
			dbo.TABLE_USERS.USER_LOGIN = @Login
	END
ELSE
-- Dans cette partie, le compte n'existe pas, on va donc le créer
	BEGIN
		INSERT INTO dbo.TABLE_USERS
			(USER_LOGIN, 
			USER_NOM, 
			USER_PRENOM, 
			USER_EMAIL, 
			USER_TEL)
		VALUES 
			(@Login, 
			@Nom, 
			@Prenom, 
			@Email, 
			@Telephone)
	END

Conclusion :


Bon Coding

Romelard Fabrice (Alias F___)

A voir également

Ajouter un commentaire Commentaires
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011

Pour une exécution plus rapide remplacer :

IF exists(SELECT USER_ID FROM dbo.TABLE_USERS WHERE (dbo.TABLE_USERS.USER_LOGIN = @Login))

Par

IF exists(SELECT TOP 1 1 FROM dbo.TABLE_USERS WHERE (dbo.TABLE_USERS.USER_LOGIN = @Login))

c'est un détail, je le concède!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Merci :)
Messages postés
12
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
3 août 2010

Bonjour,

Personnellement, j'utilise ceci :

Je ne sais pas si c'est moins bon ou pas.

Le Set NOCOUNT ON permet de recevoir les messages d'erreurs faits dans l'insert s'il y en a (dans des cas de contraintes pas exemple)

CREATE PROCEDURE dbo.AddOrUpdateUser
(
@Login as nvarchar(15),
@Nom as nvarchar(25),
@Prenom as nvarchar(25),
@Email as nvarchar(50),
@Telephone as nvarchar(10)
)
as
SET NOCOUNT ON
UPDATE
dbo.TABLE_USERS
SET
dbo.TABLE_USERS.USER_NOM = @Nom,
dbo.TABLE_USERS.USER_PRENOM = @Prenom,
dbo.TABLE_USERS.USER_EMAIL = @Email,
dbo.TABLE_USERS.USER_TEL = @Telephone
WHERE
dbo.TABLE_USERS.USER_LOGIN = @Login

If @@Rowcount = 0
INSERT INTO dbo.TABLE_USERS
(USER_LOGIN,
USER_NOM,
USER_PRENOM,
USER_EMAIL,
USER_TEL)
VALUES
(@Login,
@Nom,
@Prenom,
@Email,
@Telephone)


Marc
Messages postés
24
Date d'inscription
lundi 15 décembre 2003
Statut
Membre
Dernière intervention
24 novembre 2005

oui moi aussi je te remercie pour ce code car il repond exactement a ce que je chercher sans arriver a l'exprimé.

voila tu vient de m'eviter 1 tube d'aspirine et ca marche en prime.

bravo
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008

salut salut fabrice69,

Super ton code ....a chaque fois que je lis un de tes codes ....j'en apprends beaucoup crois moi !

Encore encore ....on veut plus de codes de ta part ;-) !
Tu n'as pas des exemple simples sur les droits et les jobs sous sql serveur a poster?

Merci pour tout....

A bientot

Ciao
Christophe
un bouillonnais
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.