web-dev-qa-db-ja.com

文字列へのBLOB、SQL Server

データベースにBLOBデータ型として保存されたテキスト文字列があります。 SQL選択クエリで抽出したいのですが、BLOBから読み取り可能なtextへの変換/キャストに問題があります。

私は試しました.

select convert(nvarchar(40),convert(varbinary(40),BLOBTextToExtract))
from [NavisionSQL$Customer]

私は同様のものが必要だと思いますが、変換を行うために必要なものを正確に理解できません。誰かが私にいくつかの方向を教えてもらえますか?

よろしく

9
user822448

問題は明らかにSQLサーバーではなく、フィールドを更新するNAVシステムでした。 NAVのBLOBフィールドで使用できる圧縮プロパティがあり、SQL Serverの一部ではありません。したがって、変換は機能しましたが、カスタム圧縮によりデータが読み取れなくなりました。

解決策は、オブジェクトデザイナー、テーブルデザイナー、フィールドのプロパティ(フィールド行でShift + F4)を使用して圧縮をオフにすることでした。

その後、次のようにしてデータの抽出を行うことができます:select convert(varchar(max)、cast(BLOBFIELD as binary))from Table

多くの点で正解であったすべての回答に感謝します!

8
user822448

受け入れられた回答は、最初の30文字でのみ機能します。これは私にとってはうまくいきます:

select convert(varchar(max), convert(varbinary(max),myBlobColumn)) FROM table_name
4
chris

それは、データが最初に列に入れられた方法によって異なります。次のいずれかを試してみてください:

SELECT CONVERT(NVarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];

または、それがvarcharだけの場合...

SELECT CONVERT(VarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];

このスクリプトを使用して、SQL Server 2K8 R2で検証およびテストしました。

DECLARE @blob VarBinary(MAX) = CONVERT(VarBinary(MAX), 'test');

-- show the binary representation
SELECT @blob;

-- this doesn't work
SELECT CONVERT(NVarChar(100), @blob);

-- but this does
SELECT CONVERT(VarChar(100), @blob);
4
Yuck
CREATE OR REPLACE FUNCTION HASTANE.getXXXXX(p_rowid in rowid) return VARCHAR2
  as
          l_data long;
  begin
         select XXXXXX into l_data from XXXXX where rowid = p_rowid;
         return substr( l_data, 1, 4000);
  end getlabrapor1;
0
imratE

あなたはこれを試すことができます:

select convert(nvarchar(max),convert(varbinary(max),blob_column)) from table_name
0
visakh

これを見つけた...

bcp "SELECT top 1 BlobText FROM TableName" queryout "C:\ DesinationFolder\FileName.txt" -T -c '

Bcpフラグのさまざまなオプションについて知る必要がある場合...

http://msdn.Microsoft.com/en-us/library/ms162802.aspx

0
sam yi