我試圖導出相當大數量的圖像文件,作爲二進制數據存儲在SQL數據庫內部。通過存儲過程從SQL導出二進制文件數據(圖像)
在SQL中編寫存儲過程相當新穎,我遇到了一些關於如何存檔的非常有用的指南,但我似乎錯過了一些東西。
我在本地運行SQL Server 2008 R2,並試圖將這些文件寫入我的C:\驅動器上的文件夾。
這裏是我迄今爲止的樓內設有商務部分:
BEGIN
DECLARE @cmd VARCHAR(8000)
DECLARE @result int
DECLARE curExportBinaryDocs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT Photograph_Data FROM [ALBSCH Trial].[dbo].[Photograph] WHERE Photograph_ID = '
+ CAST(Photograph_ID AS VARCHAR(500)) + '" queryout "' + @OutputFilePath
+ CAST(Photograph_ID AS VARCHAR(500)) + '.jpg"' + ' -n -T'
FROM dbo.Photograph
OPEN curExportBinaryDocs
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @cmd
EXEC @result = xp_cmdshell @cmd
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
END
CLOSE curExportBinaryDocs
DEALLOCATE curExportBinaryDocs
END
「@result」總是被設置爲「1」 xp_cmdshell的調用之後(失敗)。所有表名/字段都是正確的,所以我懷疑我的BCP呼叫有問題,但我不確定接下來要嘗試什麼。
任何幫助或建議將是非常受歡迎的。
你是如何運行SQL的? SQL在用戶憑證下運行...該用戶是否有權在輸出文件夾中創建文件? –
我使用通常的Windows用戶名和Windows身份驗證登錄到SQL服務器。 我設法使用這裏概述的方法得到一個解決方案:http://stackoverflow.com/questions/1366544/how-to-export-image-field-to-file但如果可能我想到我的原始方法存在的問題的底部,只是爲了安心! – ChrisMurray
我相信你在做什麼是有點不對。你知道SQL Server的「文件流啓用數據庫」。它允許您將BLOB存儲在硬盤上,而BLOB仍由SQL Server維護。在將BLOBs追加到驅動器之後,您的應用程序只需要對數據庫進行查詢並獲取對象。另外,使用光標不是一件好事(它很慢)。 – gotqn