2016-09-02 73 views
1

问题:我必须从MS SQL(PDF)中的varbinary列中提取数据。如何从Microsoft SQL中的varbinary(Max)中提取数据

我已经使用这个脚本

DECLARE @SQLIMG VARCHAR(MAX), 
    @IMG_PATH VARBINARY(MAX), 
    @TIMESTAMP VARCHAR(MAX), 
    @ObjectToken INT 

DECLARE IMGPATH CURSOR FAST_FORWARD FOR 
     SELECT csl_CompanyLogo from mlm_CSCompanySettingsLocalizations 

OPEN IMGPATH 

FETCH NEXT FROM IMGPATH INTO @IMG_PATH 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SET @TIMESTAMP = 'd:\' + replace(replace(replace(replace(convert(varchar,getdate(),121),'-',''),':',''),'.',''),' ','') + '.bmp' 

     PRINT @TIMESTAMP 
     PRINT @SQLIMG 

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

     FETCH NEXT FROM IMGPATH INTO @IMG_PATH 
    END 

CLOSE IMGPATH 
DEALLOCATE IMGPATH 

从这里Script to save varbinary data to disk

但现在我不知道,我怎样才能使文件名更具可读性?例如使用来自id列的记录。

P.s.我应该放置tsql标签吗?

+0

你什么意思通过读取多少?你想如何看你的文件名?你可能想使用这个ID列在哪里? – BeanFrog

+0

因此,例如:我有文件'FileName'列和'vabinary'列。我想从'varbinary'中提取文件并将它们命名为'FileName'。 –

回答

1

在顶部添加一个与您的文件名列相同类型的新变量。

更改您的光标以选择varbinary和文件名,并使用您的新文件名变量。

在脚本中设置文件名时使用filename变量,而不是日期。

您的脚本变为:

DECLARE @SQLIMG VARCHAR(MAX), 
    @IMG_PATH VARBINARY(MAX), 
    @TIMESTAMP VARCHAR(MAX), 
    @ObjectToken INT, 
    @Filename varchar(max) 

DECLARE IMGPATH CURSOR FAST_FORWARD FOR 
     SELECT csl_CompanyLogo, [filename] from mlm_CSCompanySettingsLocalizations 

OPEN IMGPATH 

FETCH NEXT FROM IMGPATH INTO @IMG_PATH , @Filename 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SET @TIMESTAMP = 'd:\' + @Filename + '.bmp' 

     PRINT @TIMESTAMP 
     PRINT @SQLIMG 

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

     FETCH NEXT FROM IMGPATH INTO @IMG_PATH , @Filename 
    END 

CLOSE IMGPATH 
DEALLOCATE IMGPATH 
相关问题