0

我使用SQL Server並在我的數據庫上啓用FileStream。爲了挽救我的文件從SSMS FILESTREAM表我用下面的代碼:將SQL Server Filestream數據保存到文件

INSERT INTO dbo.mytable(Data) 
SELECT * 
FROM OPENROWSET(BULK 'C:\Temp\image.png', SINGLE_BLOB) AS z 

我找了一個SQL查詢,從表保存FILESTREAM數據到特殊的路徑。

該怎麼辦。

我期待已久的SQL Server查詢,我不想在.NET中,德爾福使用的工具,應用程序或程序等

在此先感謝

回答

2

這個怎麼樣?這是一種將文件寫入磁盤的純SQL方法,但它會爲您提供命令外殼,這會在服務器上造成安全風險。

declare @writetofile varchar(max) 
select @writetofile = 'osql -U -P -S -Q"select ColumnName from yourtable" -o"c:\SomeFolder\MyFile.bin" 
exec master..xp_cmdshell @writetofile 

更新: 這不是爲了運行,但嘗試在PowerScript中或.bat文件運行這個最簡單的事情:

Rem CD command sets the execution folder 
cd C:\Program Files\Microsoft SQL Server\90\Tools\binn 

rem SQLCmd sets the command using SQLCmd.exe program 
rem -S = server name, -d database name, -U is username, -P is password, -Q is query to run, -o is output to 
SQLCMD -S ServerName\InstanceName -d DBName -U sa -P MyPassword -Q"select top 1 FieldName from TableName" -o"c:\temp\MyFile.txt" 
+0

您的查詢不起作用。可以解釋更多的解決方案。 –

+0

查看我的更新回答 – Brian

+0

+1謝謝。但我附加的文件是一個PNG文件。當我使用你的代碼創建一個包含查詢結果的文件時,類似於在ssms中查詢文本結果。 –

0

這篇文章可以幫助你: Script to save varbinary data to disk

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 
相關問題