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
, me sale 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é hago Level #
y qué quiero state #
decir, y cómo busco mensajes de error como el anterior: 8152?
fuente
Firstname nvarchar(5)
Si inserta más de 5 caracteres obtendrá el errorTuve este problema, aunque la longitud de los datos fue más corta que la longitud del campo. Resultó que el problema era tener otra tabla de registro (para el seguimiento de auditoría), llena por un disparador en la tabla principal, donde el tamaño de la columna también tenía que cambiarse.
fuente
En una de las
INSERT
declaraciones, está intentando insertar una cadena demasiado larga en una columna de cadena (varchar
onvarchar
).Si no es obvio cuál
INSERT
es el infractor con solo mirar el script, puede 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 extracto. En su caso, parece ser el segundo INSERT que produce el error.fuente
Algunos de sus datos no pueden caber en la columna de su base de datos (pequeña). No es fácil encontrar lo que está mal. Si usa C # y Linq2Sql, puede enumerar el campo que se truncaría:
Primero cree la clase auxiliar:
Luego prepare el contenedor para SubmitChanges:
Prepare el controlador de excepción global y los detalles de truncamiento del registro:
Finalmente usa el código:
fuente
Solo quiero contribuir con información adicional: tuve el mismo problema y fue porque el campo no era lo suficientemente grande para los datos entrantes y este hilo me ayudó a resolverlo (la respuesta principal lo aclara todo).
PERO es muy importante saber cuáles son las posibles razones que pueden causarlo.
En mi caso, estaba creando la tabla con un campo como este:
Por lo tanto, el campo "Período" tenía una longitud de cero y hacía que las operaciones de inserción fallaran. Lo cambié a "XXXXXX", que es la longitud de los datos entrantes y ahora funcionaba correctamente (porque el campo ahora tenía una longitud de 6).
Espero que esto ayude a cualquiera con el mismo problema :)
fuente
Otra situación en la que puede obtener este error es la siguiente:
Tuve el mismo error y la razón fue que en una declaración INSERT que recibió datos de una UNIÓN, el orden de las columnas era diferente de la tabla original. Si cambia el orden en # table3 a a, b, c, solucionará el error.
fuente
en el servidor sql puede usar SET ANSI_WARNINGS OFF así:
fuente
Tuve el mismo problema. La longitud de mi columna era demasiado corta.
Lo que puede hacer es aumentar la longitud o acortar el texto que desea poner en la base de datos.
fuente
También tuve este problema en la superficie de la aplicación web. Eventualmente descubrí que el mismo mensaje de error proviene de la declaración de actualización de SQL en la tabla específica.
Finalmente, descubrí que la definición de columna en la (s) tabla (s) histórica (s) correspondiente (s) no mapeó la longitud de los
nvarchar
tipos de columna de la tabla original en algunos casos específicos.fuente
Tuve el mismo problema, incluso después de aumentar el tamaño de las columnas problemáticas en la tabla.
tl; dr: la longitud de las columnas coincidentes en los tipos de tabla correspondientes también puede necesitar ser aumentada.
En mi caso, el error provenía del servicio de exportación de datos en Microsoft Dynamics CRM, que permite que los datos de CRM se sincronicen con una base de datos SQL Server o Azure SQL DB.
Después de una larga investigación, llegué a la conclusión de que el servicio de exportación de datos debe estar utilizando parámetros con valores de tabla :
Como puede ver en la documentación anterior, los Tipos de tabla se utilizan para crear el procedimiento de ingestión de datos:
Desafortunadamente, no hay forma de alterar un tipo de tabla, por lo que debe descartarse y recrearse por completo. Como mi tabla tiene más de 300 campos (😱), creé una consulta para facilitar la creación del Tipo de tabla correspondiente en función de la definición de las columnas de la tabla (solo reemplace
[table_name]
con el nombre de su tabla):Después de actualizar el Tipo de tabla, el servicio de exportación de datos comenzó a funcionar correctamente una vez más. :)
fuente
Cuando intenté ejecutar mi procedimiento almacenado, tuve el mismo problema porque el tamaño de la columna que necesito para agregar algunos datos es más corto que los datos que quiero agregar.
Puede aumentar el tamaño del tipo de datos de la columna o reducir la longitud de sus datos.
fuente
Otra situación en la que puede ocurrir este error es en SQL Server Management Studio. Si tiene campos de "texto" o "ntext" en su tabla, no importa qué tipo de campo esté actualizando (por ejemplo, bit o entero). Parece que Studio no carga todos los campos "ntext" y también actualiza TODOS los campos en lugar del campo modificado. Para resolver el problema, excluya los campos "texto" o "ntext" de la consulta en Management Studio
fuente
Kevin Pope's comentario de bajo la respuesta aceptada fue lo que necesitaba.
El problema, en mi caso, era que tenía desencadenantes definidos en mi tabla que insertarían transacciones de actualización / inserción en una tabla de auditoría, pero la tabla de auditoría tenía un desajuste de tipo de datos donde una columna con
VARCHAR(MAX)
en la tabla original se almacenaba comoVARCHAR(1)
en el auditoría de la tabla, por lo que mis desencadenadores fallaban cuando insertaba algo mayor queVARCHAR(1)
en la columna de la tabla original y recibía este mensaje de error.fuente
Utilicé una táctica diferente, campos que se asignan 8K en algunos lugares. Aquí solo se usan aproximadamente 50/100.
Quería velocidad, ya que tengo 1M de registros totales, y cargo 28K de ellos.
fuente