1
DECLARE @tableHTML  NVARCHAR(MAX) ;

SET @tableHTML =
    N'<H1>Report Heading</H1>' +
    N'<table border="1">' +
    N'<th>Check Number</th>' +
    N'<th>Last Operator Date</th>' +
    N'<th>Last Timestamp</th>' +
    N'<th>Run Date</th>' +
    N'<th>Issued Check Number</th>' +
    N'<th>Error Description</th>' +
    '<tr>' +
    CAST ( ( SELECT td = S.CHK_NUM,       '',
                    td = S.LAST_OPER_ID, '',
                    td = S.LAST_TIMESTMP, '',
                    td = S.RUN_DT, '',
                    td = ISNULL(S.RE_ISSUE_CHK_NUM,-1), '',
                    td = ISNULL(S.ERR_DESC,'<null>'), ''
              FROM STAGNG_CDDP_ERR_RCD S
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) +
    N'</table>' ;

PRINT @tableHTML

如果我尝试用 varchar 文字“(Null)”替换 -1,则会收到错误消息

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value 'Null' to data type int.

如果 RE_ISSUE_CHK_NUM 为空,我更愿意显示,但该字段是 int,我相信“TYPE”参数会强制返回值与原始列的类型匹配。

如何修改输出,使所有列都是文本,因此是可格式化的?

编辑

当我尝试这个...

DECLARE @tableHTML  NVARCHAR(MAX) ;

SET @tableHTML =
    N'<H1>Report Heading</H1>' +
    N'<table border="1">' +
    N'<th>Check Number</th>' +
    N'<th>Last Operator Date</th>' +
    N'<th>Last Timestamp</th>' +
    N'<th>Run Date</th>' +
    N'<th>Issued Check Number</th>' +
    N'<th>Error Description</th>' +
    '<tr>' +
    CAST ( ( SELECT td = S.CHK_NUM,       '',
                    td = S.LAST_OPER_ID, '',
                    td = S.LAST_TIMESTMP, '',
                    td = S.RUN_DT, '',
                    --td = ISNULL(S.RE_ISSUE_CHK_NUM,-1), '',
                    td = CONVERT(NVARCHAR(16), ISNULL(S.RE_ISSUE_CHK_NUM,'(Null)')), '',
                    td = ISNULL(S.ERR_DESC,'<null>'), ''
              FROM STAGNG_CDDP_ERR_RCD S
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) +
    N'</table>' ;

PRINT @tableHTML

我明白了:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value '(Null)' to data type int.

这是我想在 HTML 中显示字符串“Null”的 Null 的 Check Number 字段。

这是TYPE问题的参数吗?

4

2 回答 2

1

更改此行

td = CONVERT(NVARCHAR(16), ISNULL(S.RE_ISSUE_CHK_NUM,'(Null)')), '',

td = CASE WHEN S.RE_ISSUE_CHK_NUM IS NULL THEN '<NULL>' ELSE  CONVERT(NVARCHAR(16), S.RE_ISSUE_CHK_NUM) END , '',
于 2012-09-21T19:12:39.917 回答
0

如果我尝试用 varchar 文字“(Null)”替换 -1,则会在将 varchar 值“Null”转换为数据类型 int 时收到错误 Conversion failed。

我怀疑以下行正在发生此错误:

td = ISNULL(S.ERR_DESC,'<null>'), 

如果要显示-1whenS.ERR_DESC为null,则可以将其放在引号中,如下所示:

td = ISNULL(S.ERR_DESC,'-1'), 

如何修改输出,使所有列都是文本,因此是可格式化的?

您可以将CONVERT非文本列添加到NVARCHAR.

例如

td = CONVERT(NVARCHAR(16), ISNULL(S.RE_ISSUE_CHK_NUM,-1)), '',
于 2012-09-21T18:46:42.203 回答