2016-02-29 110 views
0

我正在使用Microsoft SQL Server 2008 R2。我在表Reminderimage中有varbinaryRelatedData_img。在那一欄中,我存儲Word,Excel文件,圖像(PNG,BMP或JPG格式)或文本文件等。現在我想要使用命令將數據從該列存儲到磁盤。從Varbinary列中提取數據並將其保存爲其原始格式

我曾嘗試使用此命令BCP

bcp "SELECT RelatedData_img FROM Reminderimage.dbo.Reminderimage" queryout "D:\testing6" -n -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest 

我得到它包含XML文件的文件。我試過-N-c而不是-n。但我得到相同的XML文件。

如何獲取原始格式的文件(word,excel,jpg等)。我想一次性存儲所有列的內容,因爲我不知道哪一行有哪個格式的文件。

我該如何做到這一點?

回答

1
  • Create a format file查詢一列(比如說,C:\Temp\xyz.fmt)。
  • 編輯格式文件以將前綴設置爲0字節(例如使用記事本)。
SET NOCOUNT ON; 
CREATE TABLE tt(the_file VARBINARY(MAX) NOT NULL); 
GO 
SET NOCOUNT ON; 
DECLARE @bcp_cmd VARCHAR(8000); 
SET @bcp_cmd='BCP '+QUOTENAME(DB_NAME())+'.dbo.tt format nul -T -N -f "C:\Temp\xyz.fmt" -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest'; 
EXEC master.sys.xp_cmdshell @bcp_cmd; 
DROP TABLE tt; 
GO 
-- This creates C:\Temp\xyz.fmt file with prefix=8... Change the 8 to 0 in it. 

  • 使用在你的BCP導出命令的格式文件。您將不得不使用光標來遍歷想要導出的記錄,併爲您希望生成的每個文件生成一個動態BCP命令。這是一個從你的問題的表中選擇第一行的例子,並且輸出它做D:\testing6
SET NOCOUNT ON; 
DECLARE @bcp_cmd VARCHAR(8000); 
SET @bcp_cmd='BCP "SELECT TOP 1 RelatedData_img FROM Reminderimage.dbo.Reminderimage" QUERYOUT "D:\testing6" -T -fC "C:\Temp\xyz.fmt" -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest'; 
EXEC master..xp_cmdshell @bcp_cmd; 
GO 
+0

我也想你的建議,它只是將文件複製到d:與名testing6 \。如何決定這個文件的擴展名? –

+0

@ITresearcher如果您沒有在數據庫中存儲文件的格式,則必須自己檢查二進制數據。 SQL Server中沒有任何功能可自動奇蹟式地檢測文件的格式。 –

+0

在上述網站中,我沒有找到創建列格式的方法。解釋爲表創建fmt文件的過程。你能幫我創建一個'RelatedData_img'列的fmt文件嗎? –

相關問題