Предполагается, что вы имеете в виду 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 ;