No, no está registrado en ningún lado. Vaya a votar y exponga su caso de negocios; Este es uno de la larga lista de cosas que deben corregirse en SQL Server.
Esto se solicitó hace años en Connect (probablemente primero en el marco de tiempo de SQL Server 2000 o 2005), luego nuevamente en el nuevo sistema de comentarios:
Y ahora se ha entregado, en SQL Server 2019 , SQL Server 2017 CU12, y aparecerá en un futuro SQL Server 2016 SP2 CU.
En el primer CTP público de SQL Server 2019, solo aparece bajo la marca de seguimiento 460. Esto suena un poco secreto, pero se publicó en este documento técnico de Microsoft . Este será el comportamiento predeterminado (no se requiere marca de seguimiento) en el futuro, aunque podrá controlar esto a través de una nueva configuración de base de datos VERBOSE_TRUNCATION_WARNINGS
.
Aquí hay un ejemplo:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
Resultado en todas las versiones compatibles anteriores a SQL Server 2019:
El mensaje 8152, Nivel 16, Estado 30, Línea 5
Cadena o datos binarios se truncarían.
La instrucción se ha terminado.
Ahora, en los CTP de SQL Server 2019, con el indicador de rastreo habilitado:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
El resultado muestra la tabla, la columna y el valor ( truncado , no lleno ):
Msg 2628, Nivel 16, Estado 1, Línea 11 La
cadena o los datos binarios se truncarían en la tabla 'tempdb.dbo.x', columna 'a'. Valor truncado: 'f'.
La instrucción se ha terminado.
Hasta que pueda soltar todo y actualizar a SQL Server 2019, o pasar a la Base de datos SQL de Azure, puede cambiar su código "automático" para extraer la longitud máxima sys.columns
, junto con el nombre del que debe estar llegando de todos modos, y luego aplicar LEFT(column, max_length)
o cualquiera que sea el equivalente de PG. O, dado que eso solo significa que perderá datos silenciosamente, descubra qué columnas no coinciden y arregle las columnas de destino para que se ajusten a todos los datos de la fuente. Dado el acceso a los metadatos a ambos sistemas, y el hecho de que ya está escribiendo una consulta que debe coincidir automáticamente con las columnas fuente -> destino (de lo contrario, este error no sería su mayor problema), no debería tener que hacer ninguna fuerza bruta adivinando en absoluto.
sys.columns
porque no tenía ni idea de qué código está usando actualmente para generar "automáticamente" sus consultas. Realmente no hay mucho más complejo que podría adivinar sobre incorporar a su código queSELECT name, object_id, max_length FROM sys.columns;
. Como ya tiene un código automático que debe estar haciendo esto, o algo parecido, no pensé que fuera necesario un ejemplo.sys.columns
funciona con dos columnas que tienen lo mismoname
. Además, conseguí que la cosa funcionara usando la biblioteca en lugar desys
, ¿por qué haría eso como la respuesta elegida?Microsoft SQL doesn't have x, do y instead
es una contribución válida, pero siy
es inferior a la míay
, voy a hacer algo diferente y marcarlo como elegido.Finalmente, Microsoft decidió proporcionar información significativa para
String or binary would be truncated
comenzar desde SQL Server 2016 SP2 CU, SQL Server 2017 CU12 y en SQL Server 2019.La información ahora incluye tanto la columna de la tabla ofensiva (nombre completo) como el valor ofensivo (truncado a 120 caracteres):
fuente