【问题标题】:SQL Value is being replaced by the next value in tableSQL 值被表中的下一个值替换
【发布时间】:2015-05-19 09:52:08
【问题描述】:

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

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';

问题:

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

Any1 知道如何解决这个问题吗?我希望表中的文本值为 ''(空字符串)或 NULL,而不是替换为 Land 的值。而且地价会丢失。

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

【问题讨论】:

  • 您使用的是哪个 SQL Server 版本?答案会因 SQL Server 版本而异。
  • 我正在使用版本为 11.0.5058.0 的 Sql Server 2012

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


【解决方案1】:

这个问题已经解决了

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

如果没有用 xsinil 指定,则对于 xml,默认情况下不会处理空值。这意味着它设置了 xsi:nil ="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多