我在我的测试环境和我的生产环境之间进行此检查。 我正在使用一个表并通过电子邮件将该表发送给我自己,测试或产品中缺少数据(不匹配的数据)。
SET @tableHTML NVARCHAR(MAX);
SET @tableHTML = N'<H3> Rows </H3>'+
N'<table border = "1">'+
N'<tr><th>ID</th>'+
N'<th>Company</th>'+
N'<th>Text</th>'+
N'<th>Land</th>'+
CAST ((SELECT td=ID,'',
td = Company, '',
td = [Text],'',
td = Land, ''
FROM (SELECT ID, Company, [Text], Land
FROM (SELECT * FROM [dbo].[Test]
UNION ALL
SELECT * FROM [dbo].[Prod]) data
GROUP BY
ID, Company, [Text], Land
HAVING COUNT(*)!=2) T
for XML Path ('tr'), TYPE) as NVARCHAR(MAX))+
N'</table>';
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'My Email;',
@body = @tableHTML,
@body_format = 'HTML';
问题:
所以问题是我得到了这个程序,它给我发了一封电子邮件。但是,假设数据库中的Text字段为空。它不会在表中为空,它将被找到的下一个值替换为Land值。
Any1知道如何解决这个问题?我希望表格中的文字值为&#39;&#39; (空字符串)或NULL而不是被Land的值替换。土地价值将会缺失。
编辑: XML输出看起来不错,但是当它被解析为Html表时会出现问题。从上到下为空的所有列都将被下一列替换,并且任何行都有值。
答案 0 :(得分:0)
使用
解决了这个问题for XML path ('tr'), TYPE, ELEMENTS XSINIL
) as NVARCHAR(MAX))+
如果未使用xsinil指定,则for xml不会将空值作为默认值处理。这意味着它设置xsi:nil =“true”