none
Failed to initialize sqlcmd library with error number -2147024809 en sp_send_dbmail RRS feed

  • Pregunta

  • Hola todos, quería comentarles algo que me sucedió recién nos hemos migrado de SQL 2012 a SQL 2016.

    En uno de mis procedimientos almacenados tengo una invocación al msdb.dbo.sp_send_dbmail de esta forma

       exec @RtnCode = msdb.dbo.sp_send_dbmail
          @profile_name = 'ProfileMail',
          @recipients = @Para, 
          @copy_recipients = @CC, 
          @blind_copy_recipients = @BCC,
          @query = @Procedimiento,
          @execute_query_database = @BaseDatos,
          @subject = @Asunto,
          @body_format = 'HTML',
          @body = @Cuerpo,
          @attach_query_result_as_file = 1,
          @query_attachment_filename = @NombreArchivo,
          @query_result_header = 0,
          @query_result_width = 10000,
          @query_result_separator = '',
          @exclude_query_output=0,
          @query_no_truncate=1

    Este bloque funcionaba sin problemas en SQL 2012, pero cuando se trató de ejecutarlo en SQL 2016 comenzó a enviar este error:

    Msg 22050, Level 16, State 1, Line 0
    Failed to initialize sqlcmd library with error number -2147024809.

    En la variable @Procedimiento, está una simple ejecución de un procedimiento almacenado ya existente, digamos "execute SCH1.GenerarDatos" que se envía al parámetro @Query del sp_send_dbmail, lo único que hace este procedimiento es un SELECT a una tabla que tiene 2 columnas, (Orden bigint, Datos varchar(max) ). Analizando el procedimiento descubrí que en una sección se inserta a la tabla un texto simple de 272 caracteres de longitud a la columna Datos.

    Observé 2 cosas, al colocar el @query_no_truncate = 1 se mostraba el error, al eliminar el parámetro o colocarlo en 0, el error no se mostraba pero el texto de 272 caracteres se truncaba (obviamente el efecto del @query_no_truncate) a 256 caracteres. Ahora bien ¿por qué ahora el sp_send_dbmail está ignorando el valor que coloqué en @query_results_width = 10000?

    Como dije, esto funcionaba bien en SQL 2012. De momento lo he solucionado partiendo el texto en 2 líneas, pero porque la situación me lo permitía, sin embargo, cuando sea imperativo devolver un texto de mas de 256 caracteres en una sola fila, estaré en problemas.



    martes, 9 de mayo de 2017 23:37

Respuestas

Todas las respuestas