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
パラメータですか?