Как расположить поля в блокноте, который идет от db_send_email - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть блокнот с ожидаемыми результатами ... Но поля расположены не правильно. Один столбец идет в одну строку, а другой - в другую, как будто. Не очень хорошо выглядит. набор результатов. Пожалуйста, помогите мне с синтаксисом и примером.

1 Ответ

1 голос
/ 27 апреля 2011

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