begin process at 2012 05 25 12:08:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Procédure

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : fabrice69

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
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___)


 Sources du même auteur

SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE
SQL SERVER 2000 - VIDER ET COMPACTER TOUTES LES BASES DE DON...
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN...
SQL SERVER - OBTENIR LA POSITION DU PREMIER CHIFFRE D'UNE CH...
SQL SERVER - UPDATE D'UNE TABLE EN BOUCLE PAR LOT

 Sources de la même categorie

IMPORTATION DE FICHIER TEXT (CSV) RAPIDEMENT par vladam
Source avec une capture T-SQL - SPLIT SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
[ORACLE]DÉTERMINER LA DATE DU PREMIER JOUR D'UNE SEMAINE PAR... par Bouillou2
T-SQL - PROCÉDURE - STOCKÉE - PLACER DANS UNE TABLE LE RÉSUL... par zavier666

 Sources en rapport avec celle ci

T-SQL - PROCÉDURE - STOCKÉE - PLACER DANS UNE TABLE LE RÉSUL... par zavier666
Source avec Zip GÉNÉRER DES REQUETES INSERT À PARTIR DES DONNÉES EXISTANTES ... par lassaad83
INSERTION DE DONNÉES par NetJoao
VÉRIFIER QU'UN OBJECT (TABLE, PROCÉDURE STOCKÉE) EXISTE par rahou
SQL SERVER - PROCÉDURE STOCKÉE METTANT À JOUR TOUTES LES STA... par fabrice69

Commentaires et avis

Commentaire de Creat le 24/11/2004 02:48:12

Très partique cette commande SQL

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

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

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

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

Merci :)

Commentaire de crn_c21 le 13/11/2009 18:07:50

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!

 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. update dans SqlServer 2008 [ par titi66 ] bonjourdans un procédure stockée, je passe  des parametres, je fais des calculset je veux mettre à jour ma table Si mon enregistrement existe je fait INSERT INTO [...] ON DUPLICATE KEY UPDATE [...] [ par xactise ] Bonjour à tous, avec une requete du type INSERT INTO [...] ON DUPLICATE KEY UPDATE [...] peux t-on savoir si c un INSERT ou un UPDATE qui à été effec 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 Grosse quantité de requêtes UPDATE multiple Vs INSERT ... ON DUPLICATE [ par kankrelune ] Bonjour... J'ai une base de données pas énorme énorme mais pas petite non plus (760000 entrées) qui nécessite d'être continuellement mise à jour et c Je Veux Faire Une Update Sur Un Colone SQL??? [ par Krayz ] Bonjour, J'a_ Besoin de faire une augmention de salaire pour chaqu persone qui fais une insertion de 500 dh bien sure j'ai fais tous le travaille a l Ajouter un enregistrement Vb INSERT INTO [ par scottmat ] Bonjour à tous, voila j'utilise VB et voudrais ajouter tout simplement une ligne (enregistrement) dans une table, voici le code que j'utilise : Di probleme de mise a jour update de plusieur colonnes [ par perrotta ] bonjour, j'ai un grand probleme avec UPDATE ,je veut modfier plusieur colonnes dans ma tables ,le probleme c'est que quand j'execute ya rien sauf une Besoin d'aide pour trigger dans mysql [ par Darkgattsu ] Salut, c'est mon tout premier message sur ce fofo alors qu'il m'aide quasiment au quotidien depuis 2ans ^^. Je suis en prépa IG Analyste Programmeur e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,683 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales