SQL SERVER - UNE PROC STOCK FAISANT SOIT UN UPDATE SOIT UN INSERT

Signaler
Messages postés
76
Date d'inscription
dimanche 25 juillet 2004
Statut
Membre
Dernière intervention
20 mars 2006
-
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26595-sql-server-une-proc-stock-faisant-soit-un-update-soit-un-insert

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
28
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
Afficher les 6 commentaires