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 :

Update non réussi à cause de la troncature de données


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut Update non réussi à cause de la troncature de données
    Bonjour,

    Je suis sous SQL Server 2000. J'ai une fonction SQL Server qui me fait des calculs pour chaque ligne et qui me retourne l'id de la ligne ainsi que le calcul fait, je stoque le tout dans une table temporaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IDENTIFIANT, dbo.MA_FONCTION(PARAM1, PARAM2) AS SchemaCompta
    INTO #T
    from MA_TABLE
    PARAM1 et PARAM2 sont des colonnes de MA_TABLE !! IDENTIFIANT aussi qui est la clé primaire.
    Cette requête marche trés bien (à la fin j'ai (50000 ligne(s) affectée(s)))
    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select * from #T
    order by 1
    cela marche trés bien et me retourne toutes mes données avec mes calculs qui sont corrects.
    Maintenant, je dois faire une mise à jour dans MA_TABLE de ce champs calculé (qui est calculé à partir d'autre paramètres qui sont dans la même table si vous avez bien suivi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MA_TABLE
    SET MA_TABLE.CHAMPS_CALCULE = #T.SchemaCompta
    FROM MA_TABLE INNER JOIN #T
    ON (MA_TABLE.IDENTIFIANT = #T.IDENTIFIANT)
    cette mise à jour classique ne marche pas et j'ai le message d'erreur:
    Serveur : Msg 8152, Niveau 16, État 4, Ligne 5
    Les données chaîne ou binaires seront tronquées.
    L'instruction a été arrêtée.
    sachant que ceci marche trés bien si je travaille sur 1000 ou 2000 lignes par exemple !! cela ne plante que sur plus que 10000 lignes de ma table

    Avez vous des idées ?


  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 862
    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 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    Vous ne donnez pas le code de la fonction, ni la définition des tables (taype de données en particulier). DOnc difficile de comprendre plus en avant.

    En tout état de cause le message est clair et explicite : vous tentez de mettre dans une colonne de dimension X une donnée de longueur Y avec Y > X. Il ne peut donc pas faire la mise à jour.

    A +

  3. #3
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    ce qui m'intrigue, c'est que cela marche pour un petit nombre de lignes (avec des tests, ça marche jusqu'a 5000 lignes) et dés qu'il y a plus que ça, le champs devient petit !!

    voici le code de ma fonction:
    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
    FUNCTION MA_FONCTION(@PARAM1 INT, @PARAM2 INT)
    RETURNS VARCHAR(8000)
    AS
    BEGIN
     
    DECLARE @CHAMPS_CALCULE VARCHAR(8000)
     
    SET @CHAMPS_CALCULE  = ''
     
    SELECT @CHAMPS_CALCULE  = LIBELLE_ARTICLE + ' ' + @CHAMPS_CALCULE + ' - '
    FROM   MA_TABLE
    WHERE  ID_ARTICLE = @PARAM1 AND PRIX_ARTICLE < @PARAM2
     
    RETURN Left(@CHAMPS_CALCULE, Len(@CHAMPS_CALCULE)-1)
     
    END
    En fait si je diminue la taille de ma variable CHAMPS_CALCULE en mettant par exemple VARCHAR(1000) le nombre de lignes sur lequelle la mise à jour marche diminue !!!!!!!
    je comprend pas puisque la mise à jour est faite à partir de #T !!
    sinon pour ma table, elle contient 54 champs (je sais, c'est trop, mais je ne peux pas changer ceci) et le champs sur lequel je fait la mise à jour (CHAMPS_CALCULE) est de type VARCHAR(250) et même si je met VARCHAR(1000), je règle pas le problème !



    Edit : l'explication de la fonction :
    c'est une fonction qui concatène les libellés que peuvent avoir un article selon l'ID des articles, elle est inspiré d'une fonction trouvé sur le forum Microsoft SQL Server et donné par Fred BROUARD

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Le problème est dû au fait que vous avez dépassé la limite en taille d'une colonne de type varchar !

Discussions similaires

  1. [AJAX] format xml non valide à cause de pub de l'hebergeur
    Par delfare dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/07/2007, 17h09
  2. Réponses: 4
    Dernier message: 02/07/2007, 15h56
  3. connexion non réussi
    Par mohamed dans le forum Réseau
    Réponses: 5
    Dernier message: 04/04/2007, 13h23
  4. Update non effectué
    Par nellynew dans le forum Access
    Réponses: 1
    Dernier message: 13/09/2006, 12h37
  5. Update non fonctionnel
    Par kissmytoe dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 18h37

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