This error is very common for those who are using xml data. In my case we are using XML for mails having formatted data instead attachment in monitoring mails. And one of old job suddenly starts failing with this error.
The error can come up with different messages also like XML could not serialize the data for node because it contains a character (0x0000) , (0x0001), (0x0019)…
FIX : ELSE CAST(st.text AS VARBINARY) END),
My Code looks like below and highlighted code is a issue
/**************************************************************/
SET @tableHTML =
N'<H1>Blocking on ' +
N' Servername : ' + @Servername + '</H1>' +
N'<table border="1">' +
N'<tr><th>spid</th><th>Blocked</th><th>HostName</th>' +
N'<th>Program Name</th><th>User</th><th>DB_Name</th><th>Current Query</th><th>Waittime</th>' +
CAST ( ( SELECT td = CAST(spid AS VARCHAR(10)), '',
td = CAST(blocked AS VARCHAR(10)), '',
td = CAST(hostname AS VARCHAR(100)), '',
td = CAST(program_name AS VARCHAR(100)), '',
td = ISNULL(CAST(nt_username AS VARCHAR(30)),' '), '',
td = ISNULL(CAST(DB_NAME(dm.dbid) AS VARCHAR(30)),' '), '',
td = (CASE WHEN (st.text IS NULL) THEN Isnull(st.text,'--') ELSE CAST(st.text AS VARCHAR(500)) END), '',
td = Waittime/60000
FROM master..sysprocesses dm
--LEFT JOIN SYS.DM_EXEC_REQUESTS dm on dm.session_id=spid
OUTER APPLY SYS.DM_EXEC_SQL_TEXT(dm.sql_handle) AS st
WHERE (blocked != 0 and spid != blocked and cmd != 'DB MIRROR')
OR (spid IN (SELECT s.blocked FROM master..sysprocesses s where s.blocked != s.spid) AND blocked = 0 AND cmd != 'DB MIRROR')
ORDER BY blocked
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
/**************************************************************/
So the feasible fix is as error says convert to varbinary and replace highlighted code with above mention code fix.
No comments:
Post a Comment