IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

verifier si un enregistrement existe


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut verifier si un enregistrement existe
    Bonjour,

    Je voudrais insérer des banques et des comptes bancaires dans ma db.
    Les deux étant liés, j'utilise la même procédure pour insérer les deux.
    J'aimerais vérifier à l'interieur même de ma procédure stockée l'existence d'une banque ou d'un compte, c'est à dire faire :

    SI bank existe ET compte bancaire n'existe pas : insérer le compte
    SI bank existe ET compte bancaire existe : ne rien insérer
    SI bank n'existe pas ET compte bancaire n'existe pas : insérer les deux

    j'ai fais des selects sur bank et bank account pour savoir si ils existaient deja dans la base, mais les IF ne marchent pas ...

    IF(account_exist >0) AND (bank_exist >0) ==> (si j'ai un id dans les deux, ne rien insérer)
    IF (account_exist =0) AND (bank_exist =0) ==> (si je n'ai pas d'id dans les deux, insérer les deux)

    Je suppute que ce n'est pas ainsi qu'on fait .... comment alors?
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Le "IF" fonctionne très bien en TSQL, regarde un exemple dans la documentation MSDN : http://msdn.microsoft.com/fr-fr/library/ms182717.aspx

    Pour tester si un enregistrement existe, j'utilise le "IF EXISTS". Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IF EXISTS (SELECT *
               FROM    BANK
               WHERE   CODE = 'XXX')...
    Je te recommande aussi d'exécuter ces 2 insertions dans une transaction.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut
    Merci pour la réponse

    J'ai fais ça, mais ça ne fonctionne pas.
    Quand j'essaie d'insérer un compte bancaire et une banque qui n'existent pas, ça passe, mais si j'essaie d'inserer un compte bancaire avec une banque deja existante non.

    Peux tu me dire où est l'erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    CREATE PROCEDURE [add_bank]
    	@name nvarchar (255)= NULL,
    	@code nvarchar (255)= NULL,
    	@bic nvarchar (255)= NULL,
    	@country nvarchar (255) = NULL,
    	@bank_account_number nvarchar (255) = NULL,
    	@iban nvarchar (255) = NULL,
    	@user_id int
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
     
    	BEGIN TRANSACTION 	
    	SET NOCOUNT ON;
     
    	declare  @bank_id int;
    	declare  @bac_id int;
    	declare  @country_id int;
    	declare  @bank_exist int;
    	declare  @account_exist int;
    	SELECT   @bank_id = ISNULL(MAX([id]),0)+1 FROM BANK;
    	SELECT   @country_id = id FROM COUNTRY WHERE name = @country;
    	SELECT   @bac_id = ISNULL(MAX([id]),0)+1 FROM BANK_ACCOUNT;
    	SELECT   @bank_exist = COUNT(*) FROM BANKS WHERE code = @code;
    	SELECT   @account_exist = COUNT(*) FROM BANK_ACCOUNT WHERE iban = @iban;
     
    	IF (@bank_exist = 0) AND (@account_exist = 0)
    	BEGIN
    			INSERT INTO dbo.BANK
    							  (id,
    							   name,
    							   code,
    							   bic_number,
    							   c_id)
     
    			VALUES (@bank_id
               ,@name
               ,@code
               ,@bic
               ,@country_id);
     
    			INSERT INTO dbo.BANK_ACCOUNT
    							  (id,
    							   account_number,
    							   iban,
    							   user_id,
    							   b_id)
     
    			VALUES (@bac_id
               ,@bank_account_number
               ,@iban
               ,@user_id
               ,@bank_id);
    	END
     
    	ELSE 
    	BEGIN
    		IF(@account_exist = 0) AND (@bank_exist > 0)
    		BEGIN 
    			INSERT INTO dbo.BANK_ACCOUNT
    							  (id,
    							   account_number,
    							   iban,
    							   user_id,
    							   b_id)
     
    			VALUES (@bac_id
               ,@bank_account_number
               ,@iban
               ,@user_id
               ,@bank_exist);
    		END
    	END
    	COMMIT TRANSACTION
    END

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Difficile de répondre sans information supplémentaire. A priori, je dirais que tu as un problème de FK sur le code Banque. En effet, tu essayes d'insérer le nombre de banque existante (@bank_exist) dans la colonne du "code banque".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut
    Non, ce n'est pas ça que je faisais
    Je sélectionnais le code banque pour voir si une banque existe car c'est un code unique.

    J'ai fini par trouver l'erreur .... j'essayais d'insérer dans la colonne id_bank de la table account le résultat du COUNT (c'est à dire 1) au lieu d'insérer l'id de la banque correspondant à ce résultat.

    C'est bon maintenant, merci à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] verifier si un enregistrement existe
    Par solaris13 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/07/2011, 19h24
  2. verifier si un enregistrement existe dans une table
    Par niceen dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/04/2008, 21h37
  3. Savoir si un enregistrement existe déjà dans une table?
    Par danje dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/08/2005, 10h32
  4. TDBlookupcombo et modification d'un enregistrement existant
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2005, 12h11
  5. Verifier qu'un dossier existe (batch)
    Par kakou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/01/2003, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo