SQL值将被表中的下一个值替换

SQL值将被表中的下一个值替换,sql,tsql,stored-procedures,sql-server-2012,Sql,Tsql,Stored Procedures,Sql Server 2012,我在我的测试环境和我的产品环境之间做这个检查。 我正在使用一个表,并通过电子邮件将该表发送给我自己,其中包含测试中丢失的数据或不匹配的prodData SET @tableHTML NVARCHAR(MAX); SET @tableHTML = N'<H3> Rows </H3>'+ N'<table border = "1">'+ N'<tr><th>ID</th>'+ N'<th>Company</th

我在我的测试环境和我的产品环境之间做这个检查。 我正在使用一个表,并通过电子邮件将该表发送给我自己,其中包含测试中丢失的数据或不匹配的prodData

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';
问题:

所以问题是我得到了这个程序,它给我发了一封电子邮件。但假设数据库中的文本字段为空。表中不会为空,它将替换为下一个找到的值,即土地价值

有人知道怎么解决这个问题吗?我希望表中的文本值为空字符串或NULL,而不是由Land值替换。土地价值也将丢失


编辑:XML输出看起来不错,但是当它被解析到Html表时,就出现了问题。所有自上而下为空的列都将被任何行上具有值的下一列替换

这个问题通过使用

for XML path ('tr'), TYPE, ELEMENTS XSINIL
) as NVARCHAR(MAX))+

如果未使用xsini指定,for xml不会将空值作为默认值处理。这意味着它设置了xsi:nil=true

您使用的是哪个SQL Server版本?答案将根据SQL Server版本而变化。我使用的是SQL Server 2012和verision 11.0.5058.0