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

-1をvarcharリテラル'(Null)'に置き換えようとすると、エラーが発生します

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

RE_ISSUE_CHK_NUMがnullの場合に表示したいのですが、そのフィールドは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であるCheckNumberフィールドです。

問題なのは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

-1をvarcharリテラル'(Null)'に置き換えようとすると、varchar値'Null'をデータ型intに変換するときに変換に失敗しましたというエラーが発生します。

このエラーは次の行で発生していると思われます。

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

nullの場合に表示-1する場合は、次のように引用符で囲むことができます。S.ERR_DESC

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 に答える