Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :Procédure Classé sous : sqlserver, update, insert, exists Niveau : Initié Date de création : 05/10/2004 Vu : 6 944

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

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

  • 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
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___)
 

Commentaires et avis

signaler à un administrateur
Commentaire de Creat le 24/11/2004 02:48:12

Très partique cette commande SQL

signaler à un administrateur
Commentaire de jimmy69 le 22/12/2004 18:09:24

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

signaler à un administrateur
Commentaire de lord mathius le 14/04/2005 02:46:06

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

signaler à un administrateur
Commentaire de marcA le 29/06/2005 15:41:21

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

signaler à un administrateur
Commentaire de jesusonline le 21/10/2005 15:52:57 administrateur CS

Merci :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

update ou insert ? [ par pazgal ] Bonjour,Voilà j'aimerais incrémenter un champ de ma table si l'enregistrement existe sinon il faut bien évidement en crée un... Ce Insert +Update [ par carpiste ] En Ms Access, Peut on faire dans la même requêteun INSERT + un UPDATE Merci d'avance SalutationsC. INSERT/UPDATE Conditionnel [ par Perse ] Bonjour,je cherche un moyen de faire un INSERT/UPDATE conditionnel.C'est à dire que lors d'un INSERT, si la ligne existe déjà dans la t access : insert into champ boolean [ par trexor ] Bonjour,j'ai un champ access boolean (true/false) que je dois remplir avec vb.net, mais j'ai une erreur insert into  Voici ma requte :D aide pour SQLSERVER [ par nagrom_om ] salut,quelqu'un sait il comment peut on avoir un listing des requetes qui sont passées sous SQL Server ??Merci ! INSERT a l'id qu'on vient de DELETE [ par Bassman ] Voila j'aimerais savoir sous mysql comment forcé l'insertion dès le "départ", c'est a dire, par exemple dans votre table utilisateur vo ms access - sqlserver - procédurestockée [ par metasky ] bonjour,je suis actuellement sur une appli liant access et sqlserver...quand je consulte mes procédures stockées dans mon projet access les Optimisation de requete [ par Antilope ] Bonjour,J'effectue une boucle sur un cursor puis à l'interieur de la boucle un insert dans une table.Du type :for r1 in c1 loop   ..... Pb Sql Update [ par padsou ] Bonjour !J'ai un souci avec une requete Sql dans Sql Server. Apparement, les caracteres de fin de ligne ne passent pas: J'ai essayé de mettre des Gestion d'une transaction avec sql server???? [ par Jbensimoh ] salutj'ai plusiers instruction insert a executé  a condition qu'ils soit tous executés, j'ai procédé comme suiteBEGIN TR


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.