error, la cadena o los datos binarios se truncarían al intentar insertar

Resuelto karthik asked hace 13 años • 18 respuestas

Estoy ejecutando el archivo data.bat con las siguientes líneas:

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

El contenido del archivo data.sql es:

   insert Customers
            (CustomerID, CompanyName, Phone)
             Values('101','Southwinds','19126602729')

Hay 8 líneas más similares para agregar registros.

Cuando ejecuto esto con start> run> cmd> c:\data.bat, aparece este mensaje de error:

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>

Además, obviamente soy un novato, pero ¿qué significan Level #y state #cómo busco mensajes de error como el anterior: 8152?

karthik avatar Apr 08 '11 13:04 karthik
Aceptado

De la respuesta de @gmmastros

Cada vez que veas el mensaje....

Cadena o datos binarios podrían truncarse

Piensa... El campo NO es lo suficientemente grande para contener mis datos.

Verifique la estructura de la tabla para la tabla de clientes. Creo que encontrará que la longitud de uno o más campos NO es lo suficientemente grande para contener los datos que está intentando insertar. Por ejemplo, si el campo Teléfono es un campo varchar(8) e intenta escribirle 11 caracteres, obtendrá este error.

karthik avatar Apr 08 '2011 06:04 karthik

Tuve este problema aunque la longitud de los datos era más corta que la longitud del campo. Resultó que el problema era tener otra tabla de registro (para seguimiento de auditoría), llenada por un activador en la tabla principal, donde también era necesario cambiar el tamaño de la columna.

alterfox avatar Jul 03 '2014 10:07 alterfox

En una de las INSERTdeclaraciones, está intentando insertar una cadena demasiado larga en una columna de cadena ( varcharo nvarchar).

Si no es obvio quién INSERTes el infractor con solo mirar el script, puedes contar las <1 row affected>líneas que aparecen antes del mensaje de error. El número obtenido más uno le da el número de estado de cuenta. En su caso parece ser el segundo INSERT el que produce el error.

Andriy M avatar Apr 08 '2011 07:04 Andriy M