SQL值正被表

时间:2015-05-19 09:52:09

标签: sql tsql stored-procedures sql-server-2012

我在我的测试环境和我的生产环境之间进行此检查。 我正在使用一个表并通过电子邮件将该表发送给我自己,测试或产品中缺少数据(不匹配的数据)。

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表时会出现问题。从上到下为空的所有列都将被下一列替换,并且任何行都有值。

1 个答案:

答案 0 :(得分:0)

使用

解决了这个问题
for XML path ('tr'), TYPE, ELEMENTS XSINIL
) as NVARCHAR(MAX))+
如果未使用xsinil指定,则

for xml不会将空值作为默认值处理。这意味着它设置xsi:nil =“true”