簡體   English   中英

SQL Server 2008 R2:將BLOB和其他列數據導出到文件系統的最佳方法

[英]SQL Server 2008 R2: Best way to export BLOB and other column data out to the file system

我已經閱讀了一些關於BCP或CLR代碼的技術,這些代碼將BLOB導出到硬盤驅動器上的單個文件,但是我需要將整個表數據BCP或CLR一起輸出(這意味着其他列是字符或整數或日期時間數據需要作為一個整體出來)我需要確保我可以將數據BCP / CLR返回到表中並在BLOB和其他列數據之間具有相同的鏈接。

有任何想法嗎?

我不確定我是否理解你的要求,所以我會嘗試涵蓋兩個案例。

首先,如果您想將所有數據(包括varbinary blob)導出到一個文件中,則可以執行此操作。 這是一個與您的表一起使用的測試腳本。 您必須在SSMS中打開SQLCMD模式。 然后發出這個腳本:

-- create target structure same as source
select top 0 *
into YourTbl2
from YourTbl

-- first line makes BCP dump to file, second line imports it to target structure    
!!bcp YourDb.dbo.YourTbl out "D:\Temp\BlobTest.bak" -T -c 
!!bcp YourDb.dbo.YourTbl2 in "D:\Temp\BlobTest.bak" -T -c 

-- test if everything is imported
select * from Playground.dbo.BlobTest
except
select * from Playground.dbo.BlobTest2

如果只想將單個文件導出到SQL Server所在的磁盤,可以使用以下命令:

!!bcp "SELECT TOP 1 YourBlob FROM YourDb.dbo.YourTbl" queryout "D:\Temp\YourFile.xyz" -T -c

如果適用,您可以共享導出blob的文件夾,並從客戶端PC訪問它。

您可以執行以下操作:您可以使用圖像數據類型來保存任何文件。並且,請仔細閱讀以下內容以了解。 我在我們的項目中實現了這一點。 簡單而充滿活力。 你只需要打電話:

Insert [tblTemp] (imageType,ImageFile) Select '.PDF',BulkColumn from Openrowset( Bulk     'C:\mak\A.PDF', Single_Blob) as tb

插入表格,您可以使用:

 WriteBinaryToDisc 'C:\NEWF\','MAK','.PDF','DOC_TABLE','DOC_ID','DOC_IMAGE','WHERE     DOC_ID=''25'''

使用指定的位置和擴展名回寫文件系統。

我用tblTemp來保存所有文件。

--FIRST CHANGE THE CONFIGURATION TO ACTIVATE THIS FEATURE
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ole Automation Procedures';
GO

--HOW TO WRITE FILES TO DIRECTLY SQL SERVER FROM DISC
CREATE TABLE [dbo].[tblTemp](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ImageType] [varchar] (10) NULL,
    [ImageFile] [image] NULL
) ON [PRIMARY]

Insert [tblTemp] (imageType,ImageFile) Select '.PDF',BulkColumn from Openrowset( Bulk     'C:\mak\A.PDF', Single_Blob) as tb
-----------------------------------------------------

--HOW TO WRITE FILE TO DISC FROM SQL SERVER
--WriteBinaryToDisc 'C:\NEWF\','MAK','.PDF','DOC_TABLE','DOC_ID','DOC_IMAGE','WHERE     DOC_ID=''25'''
ALTER PROCEDURE WriteBinaryToDisc 
(
    @Path VARCHAR(255),
    @Filename VARCHAR(100),
    @FileExt VARCHAR(4),
    @TblName varchar(50),
    @IDField VARCHAR(50),
    @ImageField VARCHAR(50),
    @WHERE VARCHAR(300)
)
AS
set nocount on
EXEC ('
DECLARE @SOURCEPATH VARBINARY(MAX),
@DESTPATH VARCHAR(MAX),
@ObjectToken INT,
@image_ID BIGINT

DECLARE IMGPATH CURSOR FAST_FORWARD FOR SELECT '+@ImageField+','+@IDField+' from     '+@TblName+' '+@WHERE+' 
OPEN IMGPATH

FETCH NEXT FROM IMGPATH INTO @SOURCEPATH, @image_ID

WHILE @@FETCH_STATUS = 0
BEGIN
SET @DESTPATH = '''+@Path+'\'+@Filename+'''+ CAST(@image_ID AS     varchar)+'''+@FileExt+'''

EXEC sp_OACreate ''ADODB.Stream'', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, ''Type'', 1
EXEC sp_OAMethod @ObjectToken, ''Open''
EXEC sp_OAMethod @ObjectToken, ''Write'', NULL, @SOURCEPATH
EXEC sp_OAMethod @ObjectToken, ''SaveToFile'', NULL, @DESTPATH, 2
EXEC sp_OAMethod @ObjectToken, ''Close''
EXEC sp_OADestroy @ObjectToken

FETCH NEXT FROM IMGPATH INTO @SOURCEPATH, @image_ID
END

CLOSE IMGPATH
DEALLOCATE IMGPATH
')
---------------------------------------------------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM