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

Développement SQL Server Discussion :

Comment récupérer l'identifiant d'une ligne en erreur lors d'un update


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 43
    Points : 37
    Points
    37
    Par défaut Comment récupérer l'identifiant d'une ligne en erreur lors d'un update
    Bonjour,

    Lors de la copie d'une table vers une autre je tombe sur des exception de cast. J'ai donc englobé le tout d'un TRY CATCH pour pouvoir logguer ces erreurs.

    Je dois donc récupérer l'id de la ligne en erreur pour savoir laquelle a une valeur qui ne se cast pas.

    J'ai un code du style :

    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
    DECLARE @imp_id Int
    SET @imp_id='193'
    DECLARE @trans_id Int
    SET @trans_id='4'
    DECLARE @error_label_fr NVarChar (4000)
    SET @error_label_fr='col_c : Erreur à la copie.'
    DECLARE @error_label_en NVarChar (4000)
    SET @error_label_en='col_c : Error when copying.'
     
       BEGIN TRY
       UPDATE transformed
           SET transformed.col_c = COALESCE(transformed.col_c, origin.col_c)
           FROM x_etl_test_nosys_transformed transformed
           INNER JOIN x_etl_test_nosys_origin origin
               ON origin.impline_id = transformed.impline_id
           WHERE transformed.imp_id = @imp_id
       END TRY
     
       BEGIN CATCH
       INSERT INTO x_etl_test_nosys_errors
       (impline_id, imp_id, trans_id, error_label_fr, error_label_en)
       SELECT impline_id, @imp_id, @trans_id, @error_label_fr + ' : ' + ERROR_MESSAGE(), @error_label_en + ' : ' + ERROR_MESSAGE()
       FROM (
           SELECT RANK() OVER(ORDER BY transformed.impline_id ASC) AS line_number, transformed.impline_id
               FROM x_etl_test_nosys_transformed transformed
               INNER JOIN x_etl_test_nosys_origin origin
                   ON origin.impline_id = transformed.impline_id
               WHERE transformed.imp_id = @imp_id) AS t
           WHERE t.line_number = ERROR_LINE() - 1
       END CATCH
    Je pensai que ERROR_LINE() retournait le numéro de la ligne en erreur dans l'ordre d'execution du update alors qu'en fait ça retourne la ligne du code de la requête en "erreur" (bien que ce ne soit pas la requête en elle même qui soit en erreur).

    Comment puis-je faire pour savoir quelle ligne me pose un probleme d'invalid cast ? Comment récupérer son identifiant ?

    (je suis sous SQL SERVER 2005 si celà peut apporter une solution plus facilement)

    Merci,
    Greg

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Par nature une requête est ensembliste. L'erreur porte donc sur la requête globalement et non sur une ligne précise. Si vous voulez savoir la ligne en cause il faut un code qui insère ligne à ligne par exemple à l'aide d'un curseur.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Comment récupérer l'index d'une ligne sélectionnée de tableau
    Par Enomahus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/12/2013, 19h46
  2. Comment récupérer l'identifiant d'une liste déroulante
    Par jackprime dans le forum Langage
    Réponses: 3
    Dernier message: 05/11/2013, 06h46
  3. Réponses: 5
    Dernier message: 27/07/2010, 12h59
  4. Réponses: 12
    Dernier message: 18/06/2008, 14h20
  5. [DOM] Comment récupérer la valeur d'une ligne cliquée dans un <DIV>?
    Par insane_80 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/07/2007, 16h11

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