SQL Server 2008でimageデータ型をvarcharに変換する質問する

SQL Server 2008でimageデータ型をvarcharに変換する質問する

SQL Server に TestPartner データベースがあります。バグの説明は、「image」データ型の列に保存されています。データを HTML テーブルとして表示するには、クエリを作成する必要があります。このクエリは、各テーブルからデータを読み取り、を使用して情報を XML として表示しますFor XML。ただし、image データ型を varchar に変換すると、例外が発生します。「FOR XML は、XML で許可されていない文字 (0x0002) が含まれているため、ノード 'TD' のデータをシリアル化できませんでした。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

これは各行に奇妙な文字を返します。これを動作させる方法を誰か知っていますか?

ベストアンサー1

簡単な答えは

select cast(cast(my_column as varbinary(max)) as varchar(max)) as column_name
from   my_table

これにより、列が varchar 形式に変換されます。Unicode データがある場合は、nvarchar(max) の方が適している可能性があります。

おすすめ記事