sp_send_dbmail Неправильный синтаксис рядом с '<'

2015-03-11 2 views
1

У меня возникла проблема с отправкой электронной почты с форматированием HTML с SQL-сервера.sp_send_dbmail Неправильный синтаксис рядом с '<'

В следующем разделе кода появляется ошибка "Line 1, incorrect syntax near '<'".

SET @tableHTML = 
    '<H1>Progress Report</H1>' + 
    '<table border="1">' + 
    '<tr>' + 
       '<th>Project Name</th>' + 
       '<th>Platform</th>' + 
       '<th>Due By</th>' + 
       '<th>Current Status</th>' + 
       '<th>Current State</th>' + 
    '</tr>' + 
    CAST ( 
       ( 
         SELECT 
           td = [Project Name], ' ', 
           td = Platform, ' ', 
           td = [Due By], ' ', 
           td = [Current Status], ' ', 
           td = [Current State], ' ' 
    FROM [dbo].[table_name] 
    ORDER BY [Current Status] DESC 
    FOR XML PATH('tr'), TYPE 
      ) AS NVARCHAR(MAX)) + 
    '</table>' ; 

Возможно, я не знаю, что это такое? Есть идеи?

Благодаря

Update 1:

Ok Я запустить код в сеансе отладки и проверили содержимое @tableHTML, содержимое выглядит хорошо, и он получает заполняется с ожидаемыми данными моего Таблица.

Значение ошибки, поступающие откуда-то еще, поэтому на этот раз я скопировал весь запрос.

DECLARE @tableHTML NVARCHAR(MAX); 

SET @tableHTML = 
    '<h1>Progress Report</h1>' + 
    '<table border="1">' + 
    '<tr>' + 
       '<th>Project Name</th>' + 
       '<th>Platform</th>' + 
       '<th>Due By</th>' + 
       '<th>Current Status</th>' + 
       '<th>Current State</th>' + 
    '</tr>' + 
    CAST 
     ( 
       ( 
         SELECT 
           td = [Project Name], '', 
           td = Platform, '', 
           td = [Due By], '', 
           td = [Current Status], '', 
           td = [Current State], '' 
    FROM [dbo].[table_name] 
    ORDER BY [Current Status] DESC 
    FOR XML PATH('tr'), TYPE 
      ) AS NVARCHAR(MAX)) + 
    '</table>'; 

EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'db_mail_account', 
    @recipients = '[email protected]', 
    @subject = 'Daily Project Tracking Report', 
    @query = @tableHTML, 
    @body_format = 'HTML'; 

Еще раз спасибо.

+0

Ничто не выделяется. Я бы предложил вам удалить одну строку за раз и выяснить, что вызывает ошибку hte. –

+0

Хорошо, так что, как и предполагалось, на самом деле ничего не было видно, поэтому я решил немного углубиться и посмотреть результат в реальном времени. Подробности см. В обновлении моего оригинального сообщения. – user2295457

ответ

0

Похоже, что вы хотите, чтобы текст письма был отправлен @query, который должен содержать действительный SQL, следовательно, ошибка.

Попробуйте использовать @body вместо:

EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'db_mail_account', 
    @recipients = '[email protected]', 
    @subject = 'Daily Project Tracking Report', 
    @body = @tableHTML, 
    @body_format = 'HTML'; 
+0

Сделано и исправлено, спасибо. Быстрый вопрос, который был взят. Если таблица содержит нулевое значение в одном столбце, в настоящее время строка перемещается влево, что прерывает форматирование таблиц (поскольку неправильные записи перечислены в неправильных заголовках столбцов). Любая идея о том, как предотвратить это? – user2295457

+1

Для каждого поля оберните его вызовом 'COALESCE()', например. 'td = COALESCE ([Название проекта], ''), '',' – TobyLL

+0

Приятно, спасибо :) Проблемы решены: D – user2295457

Смежные вопросы