Проблема в следующем запросе, возвращает NULL
.
select @body =
(
select ROW_NUMBER() over(order by id) % 2 as TRRow,
td = col1,
td = col2,
td = col3,
td = col4,
td = col5
from @tableUpdate
where notificationType = 'NEWDATE'
order by clname
for XML raw('tr'), elements
)
Сосредоточьтесь на этом единственном запросе, и вы решите свою проблему. Без выборочных данных @tableUpdate
мы не сможем решить вашу проблему. Однако, поскольку @body
равно NULL
, объединение чего-либо с ним также приведет к NULL
.
Например, select 1 + null, 'this string' + null
вернет два NULLs
.
Таким образом, все эти операторы множеств будут по-прежнему давать NULL
для @body
set @body = REPLACE(@body, '<td>', '<td align=center><font face="tahoma">')
set @body = REPLACE(@body, '</td>', '</font></td>')
set @body = REPLACE(@body, '_x0020_', space(1))
set @body = Replace(@body, '_x003D_', '=')
set @body = Replace(@body, '<tr><TRRow>0</TRRow>', '<tr bgcolor=#F8F8FD>')
set @body = Replace(@body, '<tr><TRRow>1</TRRow>', '<tr bgcolor=#EEEEF4>')
set @body = Replace(@body, '<TRRow>0</TRRow>', '')
select @body --still empty
Затем вы устанавливаете @tableHTML
на NULL
, объединяя его с @body
, потому что @body IS NULL
select @tableHTML = @tableHTML + @body
+ '</table></div></body></html>'
Что оставляет @tableHTML
и @body
со значением NULL
.
Удар в исправлении этого, так как вы строите таблицу, должен был бы установить @body
следующим образом:
select @body =
cast((select ROW_NUMBER() over(order by id) % 2 as 'td',
'',
isnull(col1,'') as 'td',
'',
isnull(col2,'') as 'td',
'',
isnull(col3,'') as 'td',
'',
isnull(col4,'') as 'td',
'',
isnull(col5,'') as 'td'
from @tableUpdate
where notificationType = 'NEWDATE'
order by clname
for XML path('tr'), elements) as nvarchar(max))