我有预期结果的记事本......但字段排列不正确。一列是一行,另一行是另一行。它看起来不太好。我听说我们可以设置列宽为结果集。请帮我解释语法和示例。
答案 0 :(得分:1)
假设您指的是sp_send_dbmail
过程来发送数据库邮件而不是db_send_email
。在这种情况下,您可以通过以下方式控制输出格式。
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)
字段有很多填充空格的情况下。
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个符号。当然,您可以使用任何适当的不同值。
只需添加字段长度计算并生成具有精确宽度的输出。
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 ;