У нас есть база данных TestPartner в SQL Server. Описания ошибок хранятся в столбце типа данных "image". Нам нужно написать запрос для отображения данных в виде html-таблицы. У нас есть запрос, который считывает данные из соответствующих таблиц для отображения информации в виде xml с помощью For XML
. Но при преобразовании типа данных image в varchar возникает исключение: "FOR XML не смог сериализовать данные для узла 'TD', потому что они содержат символ (0x0002), который не разрешен в XML. Чтобы получить эти данные с помощью FOR XML, преобразуйте их в бинарный, varbinary или image тип данных и используйте директиву BINARY BASE64.".
Запрос:
DECLARE @ResultsTable nvarchar(MAX)
--Create the XML table with the query results
SET @ResultsTable =
N'<H3>QA Automation Tests Results Summary </H3>' +
N'<table border="1">' +
N'<tr><th>Test Name</th><th>Execution Date</th>' +
N'<th>Check Name</th><th>Description</th></tr>' +
CAST ( (
select distinct Name as TD, '',
(Select CAST(CONVERT(nchar(100),CAST( TPCommandDetail AS BINARY(100) )) as VARCHAR(100)) ) as TD, ''
FROM TestPartnerDB.TP_RESULTS_RECORDS
FOR XML PATH('tr'), TYPE
) AS nvarchar(max) ) + N'</table>'
SELECT @ResultsTable
Удивительно, но это работает для некоторых записей, но как только вы увеличиваете размер, скажем, до 200. Он снова выдает ошибку. Я также пробовал:
Select CONVERT(varchar(1000), convert(varbinary(1000), tpcommanddetail)) From TestPartnerDB.TP_RESULTS_RECORDS
Это возвращает странный символ для каждой строки. Может кто-нибудь знает, как заставить эту штуку работать.