Question

I use SQL Server and enable FileStream on my database. In order to save my file to filestream table I use below code from SSMS :

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

I look for a SQL query to save FileStream data from table to special path.

How can do this.

I look for SQL Server query and I don't want use tools application or programming in .Net, Delphi and etc.

thanks in advance

No correct solution

OTHER TIPS

How about this? It's a pure SQL approach to writing a file to disk, but it does you the command shell, which opens up a security risk on the server.

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 

Update: This is not the easiest thing to get running, but try running this in a powerscript or .bat file:

 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"

This post may help you: 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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top