none
Asignar resultado con formato HTML a una variable RRS feed

  • Pregunta

  • Hola a todos

    Para el envío de correos en cuyo cuerpo va un texto formateado mediante HTML uso el código que os pondré al final por supuesto resumido a lo más importante. El problema que tengo es que la variable que puedo usar para el parámetro @body es la mayor de texto que soporta SQL 2012 (varchar(max) donde max es 8000) o al menos eso creo. Entonces cuando el resultado es mayor que esa longitud por supuesto se trunca y ya no sale como lo esperaba, me toca entonces quitar campos del SELECT, hacer SUBSTRING para acortar, etc. ¿ Tenéis alguna solución o truco para esto ?, muchas gracias de antemano.

    DECLARE @cuerpoHTML AS varchar(max)
    
    	SET @cuerpoHTML =  CONCAT(N'<style type="text/css"> .par{background:#E0FFFF } table {border-collapse:collapse} td {border:1px solid black} </style>'
    	+	N'<H2>TABLA HTML. ' + CONVERT(varchar(10),getdate(),103) + ' ' + CONVERT(varchar(5),getdate(),108) + '</H2>' 
    	+  	N'<table>' 
    	+ 	N'<tr align="center" style="font-weight:bold;background-color:yellow;"><th>PAIS</th><th>Campo1</th><th>NOMBRE</th><th>DIRECCION</th>
    	+	<th>PROVINCIA</th><th>CP</th></tr>' 
    	+  
    		CAST( 
    	(
    			SELECT IIF(ParNoPar = 0,  'par','nopar') AS [@class],td = ISNULL(Pais,''),'',td = ISNULL(Campo1,'') ,'',td = ISNULL(Nombre,''),''
    			,td = ISNULL(Direccion,''),'',td = ISNULL(Provincia,''),'',td = ISNULL(CP,'')
    			FROM MiTabla ORDER BY Orden FOR XML PATH('tr'), TYPE 	
    		 ) AS varchar(max))
    		+ N'</table>' ;
    
    		EXEC msdb.dbo.sp_send_dbmail  @profile_name = 'Correos'
    		,@recipients = 'alguien@alguien.com'
    		,@subject = 'TABLA HTML.'  
    		,@body = @cuerpoHTML
    		,@body_format = 'HTML'
    
    


    • Editado Raimundo Ferrer lunes, 26 de septiembre de 2022 8:35 Mejorar la comprension
    lunes, 26 de septiembre de 2022 8:34

Respuestas

  • Hola Raimundo Ferrer:

    No es del todo así. Parte es por la asignación y por los operadores de concatenación.

    DECLARE @cuerpoHTML AS varchar(max);
    
    SELECT @cuerpoHTML = '<style type="text/css"> .par{background:#E0FFFF } table {border-collapse:collapse} td {border:1px solid black} </style>'
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('A',8000);		 
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('B',8000);
    SELECT @cuerpoHTML += '</table>';
    
    SELECT LEN(@CUERPOHTML) 
    

    El limite se rompe con diferentes asignaciones. 

    Por otro lado una columna varchar no tiene carácteres "especiales", y la asignación de una N delante del texto no es adecuada. Sería si la variable fuera Nvarchar.


    • Marcado como respuesta Raimundo Ferrer lunes, 26 de septiembre de 2022 13:06
    lunes, 26 de septiembre de 2022 8:50

Todas las respuestas

  • Hola Raimundo Ferrer:

    No es del todo así. Parte es por la asignación y por los operadores de concatenación.

    DECLARE @cuerpoHTML AS varchar(max);
    
    SELECT @cuerpoHTML = '<style type="text/css"> .par{background:#E0FFFF } table {border-collapse:collapse} td {border:1px solid black} </style>'
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('A',8000);		 
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('B',8000);
    SELECT @cuerpoHTML += '</table>';
    
    SELECT LEN(@CUERPOHTML) 
    

    El limite se rompe con diferentes asignaciones. 

    Por otro lado una columna varchar no tiene carácteres "especiales", y la asignación de una N delante del texto no es adecuada. Sería si la variable fuera Nvarchar.


    • Marcado como respuesta Raimundo Ferrer lunes, 26 de septiembre de 2022 13:06
    lunes, 26 de septiembre de 2022 8:50
  • Hola Raimundo Ferrer:

    No es del todo así. Parte es por la asignación y por los operadores de concatenación.

    DECLARE @cuerpoHTML AS varchar(max);
    
    SELECT @cuerpoHTML = '<style type="text/css"> .par{background:#E0FFFF } table {border-collapse:collapse} td {border:1px solid black} </style>'
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('A',8000);		 
    SELECT @cuerpoHTML += @cuerpoHTML + REPLICATE('B',8000);
    SELECT @cuerpoHTML += '</table>';
    
    SELECT LEN(@CUERPOHTML) 

    El limite se rompe con diferentes asignaciones. 

    Por otro lado una columna varchar no tiene carácteres "especiales", y la asignación de una N delante del texto no es adecuada. Sería si la variable fuera Nvarchar.


    Muchas gracias, me ha funcionado, saludos
    lunes, 26 de septiembre de 2022 13:06