Problema con XML y NVARCHAR(MAX) Tengo un reporte que mando todos los días por medio de un SP y un JOB en formato HTML, pero al modificarlo y agregarle más columnas resulta que se trunca.
Reviso y veo que aparentemente se ha llegado al límite de la variable nvarchar(max) que utilizo para concatenar los encabezados con el cuerpo del correo pero veo que no es así, me explico:
Esta consulta es la que forma el cuerpo del correo: Cita: select td = Cliente, '', td = NoRemision, '', td = IDRollo, '', td = NoParte, '', td = Dimension, '', td = Spec, '', td = Factura, '', td = Inspec, '', td = Peso, '', td = PPT, '', td = Costo, ''
from Nicometal.dbo.vw_EntregaDiaria
order by NoRemision, IDRollo Pero revisando su extensión como resultado XML con datalength veo que solo ocupa 5231 bytes: Cita: select [datalength] = datalength((select td = Cliente, '', td = NoRemision, '', td = IDRollo, '', td = NoParte, '', td = Dimension, '', td = Spec, '', td = Factura, '', td = Inspec, '', td = Peso, '', td = PPT, '', td = Costo, ''
from Nicometal.dbo.vw_EntregaDiaria
order by NoRemision, IDRollo
for xml path( 'tr' ), type)) y si veo lo que ocupa sin convertirla a XML sino solo como texto, ocupa 8208 bytes: Cita: select [datalength] = datalength((select td = Cliente, '', td = NoRemision, '', td = IDRollo, '', td = NoParte, '', td = Dimension, '', td = Spec, '', td = Factura, '', td = Inspec, '', td = Peso, '', td = PPT, '', td = Costo, ''
from Nicometal.dbo.vw_EntregaDiaria
order by NoRemision, IDRollo
for xml path( 'tr' ))) Desde ahí ya no entendí el por que de el aumento, pero lo que si me afecta es que como texto no cabe el resultado completo, y es que necesito que sea texto por que debo concatenar los encabezados personalizados de la tabla y del correo. Entonces si no la convierto a nvarchar con un Convert marca un error de conversión implícita del tipo de datos xml a nvarchar(max). Cita: declare @qr as nvarchar(max)
select @qr =cast( (select td = Cliente, '', td = NoRemision, '', td = IDRollo, '', td = NoParte, '', td = Dimension, '', td = Spec, '', td = Factura, '', td = Inspec, '', td = Peso, '', td = PPT, '', td = Costo, ''
from Nicometal.dbo.vw_EntregaDiaria
order by NoRemision, IDRollo
for xml path( 'tr' ), type) as nvarchar(max) )
print @qr Ese as nvarchar(max) es el que me trunca el resultado, pero no lo entiendo por que haciendo mis pruebas una variable nvarchar(max) puede recibir mucho más que esos 8000 bytes Cita: declare @sql nvarchar(max)
set @sql = N'select [Inicio]=1,' + replicate(convert(nvarchar(max),N' '),30000) + N'[Fin]=999'
select [datalength @sql] = datalength(@sql) Esa prueba metió 60,000 bytes sin problemas, entonces .....
Que esta pasando??!!!
No alcanzo a comprender como solucionar esto |