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 :

Probleme Gestion des exception v2000


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut Probleme Gestion des exception v2000
    Salut a tous

    Voila plusieurs heures que je galère sur la fonction suivante.

    Je cherche à determiner l'existence d'une table.

    Pour cela je fais une requete sur celle-ci et la méthode et de gerer une exception (Genre NO data found mais c'est fait pour Oracle et je n'avais jamais fait de transact sql avant)

    En gros je fais un select sur la table et si il y'a un erreur, c'est que celle-ci n'existe pas. Voici le code

    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
    CREATE FUNCTION RechercheFichier_Anthony (@DateBr as varchar(8) ) RETURNS INTEGER
    AS
     
    BEGIN 
     
    DECLARE
    	@SQL varchar (1000),
    	@TROUVE integer;
     
    SET @TROUVE=0;
    SET @SQL='SELECT * FROM BRIDGE_ENCOURS_ '+ @DateBr +' ' 
    BEGIN 
    EXEC (@SQL)
     
    IF (@@ERROR<>0)
    ROLLBACK
    BEGIN
    SET @TROUVE=@TROUVE+1;
     
    END
    Je sais qu'iol est faux mais je n'arrive pas à comprendre pourquoi .

    Pouvez vous m'aider

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ...
    Au fait ne vous occupez pas de la requete en elle même , elle est bonne je l'ai deja testé dans d'autres fonctions.

    THX

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 865
    Points : 53 021
    Points
    53 021
    Billets dans le blog
    6
    Par défaut
    Vous ne pouvez pas gérer des exceptions dans des fonctions UDF car le but de celles-ci est d'être encapsulées dans une requête SQL. De plus il n'est pas permi de faire du SQL dynamique dans une fonction.

    Il vous faire faire un test en interrogeant les vues d'informations de schéma comme INFORMATION_SCHEMA.TABLES (norme SQL).

    Au passage une table n'a rien à voir avec un "fichier" !!!

    A +

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ...
    Bon j'ai changé d'approche, je me rend compte qu'avec sql server 2000, il est difficile de gerer les exceptions

    Donc je verifie de la manière suivante l'existence de ma table

    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
    CREATE FUNCTION RechercheFichier_Anthony (@DateBr as varchar(8) ) RETURNS INTEGER
    AS
     
    BEGIN 
     
    DECLARE
    	@SQL varchar (1000),
    	@TROUVE integer
     
    SET @TROUVE=0
     
    IF EXISTS
    (SELECT name FROM sys.tables WHERE name = 'BRIDGE_ENCOURS_ '+@DateBr+' ')
     
    SET @TROUVE=@TROUVE+1
     
    RETURN @TROUVE  
    END
    qu'en pensez vous ?

    Merci

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ..
    Oui j'appelle cela un "fichier" pour une raison particulière (vocabulaire d'entreprise") mais je suis bien conscient que je travaille avec une table ^^

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 865
    Points : 53 021
    Points
    53 021
    Billets dans le blog
    6
    Par défaut
    1) utilisez les information de schéma, pas les tables système (elle peuvent être supprimées, modifiées d'une version à l'autre).
    2) n'oubliez pas que le nom d'une tgable c'est SCHEMA.TABLE et pas seulement table...

    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
    CREATE FUNCTION RechercheFichier_Anthony 
           (@DateBr as varchar(8), @SCHEMA VARCHAR(128) ) 
    RETURNS BIT
    AS
     
    BEGIN
     
    RETURN CASE 
              WHEN EXISTS (SELECT * 
                           FROM   INFORMATION_SCHEMA.TABLES
                           WHERE  TABLE_NAME = 'BRIDGE_ENCOURS_ ' + @DateBr 
                             AND  TABLE_SCHEMA = COALESCE(@SCHEMA, 'dbo'))
                 THEN 1
              ELSE 0
           END      
    END
    A +

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ...
    Merci beaucoup pour cette réponse !

    Mais que dois-je mettre en paramettre à la place de @SCHEMA lors de l'appel de la fonction ??


    Merci

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ..
    et dernière question : (je ne connait pas encore très bien ce language)

    Comment je paut faire pour récuperer la valeur retour (1 ou 0) ? Car j'en ai besoin par la suite !

    Merci

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Points : 12
    Points
    12
    Par défaut ...
    C'est bon la fonction marche !!!!!! Un tres grand merci pour votre aide


    (mais je risque d'avoir de nouveaux problèmes donc ne vous sauvez pas ^^)

    @+

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

Discussions similaires

  1. [PL/SQL] gestion des exceptions - probleme
    Par etoileDesNeiges dans le forum Administration
    Réponses: 6
    Dernier message: 11/01/2007, 17h13
  2. Probleme de gestion des exceptions
    Par uriotcea dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/11/2006, 21h26
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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