2017-11-08 7 views
0

PDFファイルをディレクトリに抽出するクエリがあります。しかし何らかの理由ですべてのファイルが空(0 KB)です。 列PDFは、imageデータ型として格納されます。私は時代遅れだが、私はデータベースの所有者ではない。 回避策をお勧めしますか?xp_cmdshellがイメージデータ型に格納されたデータベースから空のPDFファイルをエクスポートする理由

CREATE TABLE #tblPolicyForms 
(
    FormID INT NOT NULL 
    ,PDF varbinary(max) NULL 
    ,PDF_FIlename VARCHAR(max) 
) 


INSERT INTO #tblPolicyForms 
SELECT FormID, 
     PDF, 
     PDF_FileName 
FROM [dbo].[tblPolicyForms] 
WHERE FormID IN (19,20,21,22) 
--select * from #tblPolicyForms 

DECLARE @FormID varchar(4); 
DECLARE @FileName VARCHAR(200); 

DECLARE FormID_cursor CURSOR FOR 
SELECT 
    FormID 
    ,PDF_FIlename 
FROM 
    #tblPolicyForms 
WHERE FormID IN (19,20,21,22) 



OPEN FormID_cursor 

FETCH NEXT FROM FormID_cursor 
INTO @FormID, @FileName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    DECLARE @cmd VARCHAR(8000) = 'BCP "SELECT PDF FROM #tblPolicyForms " queryout "C:\Users\oserdyuk\Documents\ExportDir\'[email protected]+'" -T -N' 
    --print @cmd 
    EXEC master.dbo.xp_cmdshell @cmd; 

FETCH NEXT FROM FormID_cursor 
INTO @FormID, @FileName 

END 

CLOSE FormID_cursor 
DEALLOCATE FormID_cursor 

enter image description here

答えて

0

事はBCPがSQL Serverに別の接続を開いている、とあなた#tblPolicyFormsなどの定期的な一時テーブルは、接続にプライベートです。 BCPはおそらくあなたが見ていないエラーを生成しています。

一時テーブルをグローバルテーブルに変更できますか?このようにして、他の接続(BCP)はそれにアクセスできます。あなたは、このような2ポンド記号を使用する必要があります。

CREATE TABLE ##tblPolicyForms 
(
    FormID INT NOT NULL 
    ,PDF varbinary(max) NULL 
    ,PDF_FIlename VARCHAR(max) 
) 

あなたはまた(ダブルポンドシングル)#tblPolicyFormsから##tblPolicyFormsへのすべての参照を変更する必要があります。プロシージャを異なるセッションで並行して実行すると、##tblPolicyFormsが既に存在することを示すエラーが表示されることに注意してください。

別のこととして、すべての行をすべてのファイルにエクスポートしているので、すべてのファイルが見たのと同じサイズになります。あなたは、このようなあなたのBCPでWHERE句が必要です。

DECLARE @cmd VARCHAR(8000) = 'BCP "SELECT PDF FROM ##tblPolicyForms WHERE FormID = ''' + @FormID + ''' " queryout "C:\Users\oserdyuk\Documents\ExportDir\'[email protected]+'" -T -N' 

をしかし、bcpは、あなたの行に8バイトのヘッダを付加しますので、その後も、物事は正常に動作しない場合があります。 bcpはエクスポート/インポートツールなので、後でデータベースにインポートできるファイルが作成されます。

+0

ありがとうございました。各ファイルのサイズは63 KBで、サイズはすべて同じです。しかし、私がそれを開こうとすると、Acrobat Readerでエラーが表示されます:「サポートされているファイルタイプでもファイルが破損しているために開くことができませんでした」 – Oleg

+0

私は気付きませんでしたが、ファイル。 BCPにWHERE句が必要です。私はその情報で上記の答えを編集します。 – kirchner

関連する問題