如何安排来自db_send_email的记事本中的字段

时间:2011-04-27 08:38:06

标签: sql-server sendmessage

我有预期结果的记事本......但字段排列不正确。一列是一行,另一行是另一行。它看起来不太好。我听说我们可以设置列宽为结果集。请帮我解释语法和示例。

1 个答案:

答案 0 :(得分:1)

假设您指的是sp_send_dbmail过程来发送数据库邮件而不是db_send_email。在这种情况下,您可以通过以下方式控制输出格式。

1。将输出线宽设置为固定值。

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mailer',
  @recipients = 'undisclosed',
  @query = 'SELECT field_int
                 , field_varchar_50
                 , field_varchar_250
            FROM mytable' ,
  @query_result_no_padding = 0,
  @query_result_width = 400 ;

选定的宽度应大于查询中所有字段的长度之和,例如@query_result_width = 400。但是,这会产生过宽的行,尤其是在varchar(50)varchar(250)字段有很多填充空格的情况下。

2。截断字段。

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mailer',
  @recipients = 'undisclosed',
  @query = 'SELECT field_int
                 , LEFT(field_varchar_50, 25)
                 , LEFT(field_varchar_250, 25)
            FROM mytable' ,
  @query_result_no_padding = 0 ;

这将产生输出,其中varchar(50)varchar(250)将被截断为25个符号。当然,您可以使用任何适当的不同值。

3。调整字段长度。

只需添加字段长度计算并生成具有精确宽度的输出。

DECLARE @iField_varchar_250_length
SELECT @iField_varchar_250_length = MAX(LEN(field_varchar_250)) FROM mytable

DECLARE @sQuery VARCHAR(200)
SELECT @sQuery = 'SELECT field_int
                       , LEFT(field_varchar_50, 25)
                       , LEFT(field_varchar_250, ' + CAST(@iField_varchar_250_length AS VARCHAR(10)) + ')
                  FROM mytable' ,

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mailer',
  @recipients = 'undisclosed',
  @query = @sQuery,
  @query_result_no_padding = 0 ;
相关问题