Para el truncamiento, se me ocurrió la solución siguiente para encontrar las longitudes máximo de todas las columnas:
1) Seleccione todos los datos en una tabla temporal (nombres de las columnas de suministro cuando sea necesario), por ejemplo,
SELECT col1
,col2
,col3_4 = col3 + '-' + col4
INTO #temp;
2) ejecute la siguiente instrucción SQL en la misma conexión (ajustar el nombre de la tabla temporal si es necesario):
DECLARE @table VARCHAR(MAX) = '#temp'; -- change this to your temp table name
DECLARE @select VARCHAR(MAX) = '';
DECLARE @prefix VARCHAR(256) = 'MAX(LEN(';
DECLARE @suffix VARCHAR(256) = ')) AS max_';
DECLARE @nl CHAR(2) = CHAR(13) + CHAR(10);
SELECT @select = @select + @prefix + name + @suffix + name + @nl + ','
FROM tempdb.sys.columns
WHERE object_id = object_id('tempdb..' + @table);
SELECT @select = 'SELECT ' + @select + '0' + @nl + 'FROM ' + @table
EXEC(@select);
devolverá un conjunto de resultados con los nombres de columna con el prefijo 'max_' y muestra la longitud máxima de cada columna.
Una vez que identifica la columna defectuosa, puede ejecutar otras declaraciones de selección para buscar filas extra largas y ajustar su código/datos según sea necesario.
Claro, ese es el método que termino usando. Mi pregunta es, ¿por qué SQL Server no te dice dónde está * cuando encuentra el problema? * – harpo