J'exécute le fichier data.bat avec les lignes suivantes:
Rem Tis batch file will populate tables
cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql
Le contenu du fichier data.sql est:
insert Customers
(CustomerID, CompanyName, Phone)
Values('101','Southwinds','19126602729')
Il existe 8 autres lignes similaires pour ajouter des enregistrements.
Quand je lance cela avec start
> run
> cmd
> c:\data.bat
, je reçois ce message d'erreur:
1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
Aussi, je suis un débutant évidemment, mais qu'est-ce que Level #
, et state #
signifie, et comment puis-je rechercher des messages d'erreur comme celui ci - dessus: 8152?
la source
Firstname nvarchar(5)
Si vous insérez plus de 5 caractères, vous obtiendrez l'erreurJ'ai eu ce problème bien que la longueur des données soit plus courte que la longueur du champ. Il s'est avéré que le problème était d'avoir une autre table de journal (pour la piste d'audit), remplie par un déclencheur sur la table principale, où la taille de la colonne devait également être modifiée.
la source
Dans l'une des
INSERT
instructions, vous essayez d'insérer une chaîne trop longue dans une colonne de chaîne (varchar
ounvarchar
).S'il n'est pas évident de savoir qui
INSERT
est l'auteur de l'infraction par un simple examen du script, vous pouvez compter les<1 row affected>
lignes qui se produisent avant le message d'erreur. Le nombre obtenu plus un vous donne le numéro du relevé. Dans votre cas, il semble que ce soit le deuxième INSERT qui génère l'erreur.la source
Certaines de vos données ne peuvent pas entrer dans votre colonne de base de données (petite). Il n'est pas facile de trouver ce qui ne va pas. Si vous utilisez C # et Linq2Sql, vous pouvez lister le champ qui serait tronqué:
Créez d'abord une classe d'assistance:
Préparez ensuite le wrapper pour SubmitChanges:
Préparez le gestionnaire d'exceptions global et les détails de troncature du journal:
Enfin utilisez le code:
la source
Je veux juste contribuer avec des informations supplémentaires: j'ai eu le même problème et c'était parce que le champ n'était pas assez grand pour les données entrantes et ce fil m'a aidé à le résoudre (la réponse du haut clarifie tout).
MAIS il est très important de savoir quelles sont les raisons possibles qui peuvent en être la cause.
Dans mon cas, je créais la table avec un champ comme celui-ci:
Par conséquent, le champ «Période» avait une longueur de zéro et provoquait l'échec des opérations d'insertion. Je l'ai changé en "XXXXXX", c'est-à-dire la longueur des données entrantes et cela fonctionnait maintenant correctement (car le champ avait maintenant une longueur de 6).
J'espère que cela aidera toute personne ayant le même problème :)
la source
Une autre situation dans laquelle vous pouvez obtenir cette erreur est la suivante:
J'ai eu la même erreur et la raison en est que dans une instruction INSERT qui a reçu des données d'un UNION, l'ordre des colonnes était différent de la table d'origine. Si vous changez l'ordre dans # table3 en a, b, c, vous corrigerez l'erreur.
la source
sur le serveur SQL, vous pouvez utiliser SET ANSI_WARNINGS OFF comme ceci:
la source
J'ai eu le même problème. La longueur de ma chronique était trop courte.
Vous pouvez soit augmenter la longueur, soit raccourcir le texte que vous souhaitez mettre dans la base de données.
la source
Ce problème s'est également produit sur la surface de l'application Web. Finalement découvert que le même message d'erreur provient de l'instruction de mise à jour SQL dans le tableau spécifique.
Enfin, nous avons compris que la définition de colonne dans les tables d'historique correspondantes ne correspondait pas à la longueur de colonne de table d'origine des
nvarchar
types dans certains cas spécifiques.la source
J'ai eu le même problème, même après avoir augmenté la taille des colonnes problématiques du tableau.
tl; dr: La longueur des colonnes correspondantes dans les types de tableaux correspondants peut également devoir être augmentée.
Dans mon cas, l'erreur provenait du service d'exportation de données dans Microsoft Dynamics CRM, qui permet aux données CRM d'être synchronisées avec une base de données SQL Server ou Azure SQL DB.
Après une longue enquête, j'ai conclu que le service d'exportation de données doit utiliser des paramètres de valeur de table :
Comme vous pouvez le voir dans la documentation ci-dessus, les types de table sont utilisés pour créer la procédure d'ingestion de données:
Malheureusement, il n'y a aucun moyen de modifier un type de table, il doit donc être supprimé et recréé entièrement. Étant donné que ma table contient plus de 300 champs (😱), j'ai créé une requête pour faciliter la création du type de table correspondant en fonction de la définition des colonnes de la table (il suffit de la remplacer
[table_name]
par le nom de votre table):Après avoir mis à jour le type de table, le service d'exportation de données a recommencé à fonctionner correctement! :)
la source
Lorsque j'ai essayé d'exécuter ma procédure stockée, j'ai eu le même problème car la taille de la colonne dont j'ai besoin pour ajouter des données est plus courte que les données que je veux ajouter.
Vous pouvez augmenter la taille du type de données de colonne ou réduire la longueur de vos données.
la source
Une autre situation, dans laquelle cette erreur peut se produire, se trouve dans SQL Server Management Studio. Si vous avez des champs "texte" ou "ntext" dans votre table, quel que soit le type de champ que vous mettez à jour (par exemple bit ou entier). Il semble que le Studio ne charge pas les champs "ntext" entiers et met également à jour TOUS les champs au lieu du champ modifié. Pour résoudre le problème, excluez les champs "texte" ou "ntext" de la requête dans Management Studio
la source
Le commentaire de Kevin Pope sous la réponse acceptée était ce dont j'avais besoin.
Le problème, dans mon cas, était que j'avais défini des déclencheurs sur ma table qui inséraient des transactions de mise à jour / insertion dans une table d'audit, mais la table d'audit avait une incompatibilité de type de données où une colonne avec
VARCHAR(MAX)
dans la table d'origine était stockée commeVARCHAR(1)
dans le table d'audit, donc mes déclencheurs échouaient lorsque j'insérais quelque chose de plus grand queVARCHAR(1)
dans la colonne de table d'origine et j'obtenais ce message d'erreur.la source
J'ai utilisé une tactique différente, des champs qui sont alloués 8K à certains endroits. Ici, seuls 50/100 environ sont utilisés.
Je voulais de la vitesse, car j'ai 1M d'enregistrements au total et j'en charge 28K.
la source