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 :

[insert][bug] cause inconnue


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 363
    Par défaut [insert]problème troncature des données
    salut,

    je cherche des indices pour trouver l'origine de ce bug :
    Les données chaîne ou binaires seront tronqué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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Vous avez construit votre table en spécifiant une longeur possible de données supérieure à la capacité de stockage de la table, qui est de 8060 octets.

    Dès lors toute tentative d'insérer plus de 8060 octets dans une même ligne d'une même table est rejeté.

    Démo :

    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
    CREATE TABLE T_MAX
    (MAX_COL1 INT,
     MAX_COL2 VARCHAR(8000),
     MAX_COL3 VARCHAR(8000))
     
    -- Avertissement : la table 'T_MAX' a été créée mais la taille maximale de ses lignes (16029) dépasse le nombre max. d'octets par ligne (8060). L'insertion ou la mise à jour d'une ligne dans cette table va échouer si la longueur de la nouvelle ligne dépasse 8060.
     
    INSERT INTO T_MAX VALUES (1, REPLICATE('*', 8000), REPLICATE('*', 43))
     
    INSERT INTO T_MAX VALUES (2, REPLICATE('*', 8000), REPLICATE('*', 44))
     
    -- Serveur : Msg 511, Niveau 16, État 1, Ligne 1
    -- Impossible de créer une ligne de dimension 8061 supérieure au maximum autorisé 8060.
    -- L'instruction a été arrêtée.
     
    SELECT MAX_COL1
    FROM T_MAX
     
    MAX_COL1 
    -----------
    1
    A +[/code]
    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/ * * * * *

  3. #3
    Membre chevronné
    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 : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    Bonjour,

    j'ai presque le même problème, j'ai définit un champ d'une taille de 250 caractères qui doit contenir des libellées et je fais des imports de données des fichiers de mes clients. je ne sais pas alors si les libellées de mes clients font plus de 250 caractères.
    je ne veux pas mettre tous mes champs avec une taille de 2000 (j'ai beaucoup de tables, beaucoup de champs)
    Est ce qu'il y a une option dans l'administration de SQL Server (version 2000) pour lui dire même si le champs est petit de prendre les 250 premiers caractères ou bien il faudra le faire par SQL (en utilisant des left sur tous les champs)

    En vous remerciant.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Bonjour,

    Bakoni : tu as le même soucis que Morsi

    Morsi, bakoni :
    y'a rien d'automatique. Donc faut faire des left ou right ou substring...

    A+

  5. #5
    Membre chevronné
    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 : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    ok, merci ZERS !!

    Résolu pour ma part.

  6. #6
    Membre chevronné
    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 : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Par défaut
    Finalement c'est trés possible ce que je veut faire (je le savais pas, un collègue m'a aidé)

    à l'aide de SET ANSI_WARNINGS OFF

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create table #tmp1 (  col varchar(5) )
    insert into #tmp1 (col) values ('1234567')
    select * from #tmp1
     
    SET ANSI_WARNINGS OFF
    insert into #tmp1 (col) values ('1234567')
    select * from #tmp1
     
    SET ANSI_WARNINGS ON
    insert into #tmp1 (col) values ('1234567')
    select * from #tmp1
     
    drop table #tmp1

Discussions similaires

  1. Réponses: 32
    Dernier message: 21/08/2008, 12h27
  2. Réponses: 2
    Dernier message: 11/08/2008, 11h37
  3. Insertion impossible à cause d'un champ
    Par Skangell dans le forum VBA Access
    Réponses: 13
    Dernier message: 24/06/2008, 11h19
  4. Réponses: 13
    Dernier message: 24/04/2007, 10h50

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