SQL Server 2000: как сохранить переменную Image в файл в файловой системе из хранимой процедуры - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть хранимая процедура, которая получает параметр @Data image.

И я хочу сохранить его в файловой системе из хранимой процедуры.

Есть идеи, как это сделать?

1 Ответ

2 голосов
/ 06 декабря 2011

Вы можете использовать OLE-автоматизацию (ADODB.Stream) для записи двоичных данных из хранимой процедуры SQL Server 2000, как описано здесь и здесь . В приведенном ниже примере используется переменная varbinary, но она должна работать аналогично параметру изображения.

DECLARE @Path VarChar(255)
DECLARE @Data VarBinary(1000)
SET @Data = 0x12345678
SET @Path = 'c:\test.dat'

DECLARE @object Integer
DECLARE @hr Integer
-- create the ADO stream object
EXEC @hr = sp_oacreate 'ADODB.Stream', @object OUTPUT, 1
IF (@hr <> 0)
   RAISERROR('ADO stream creation failed', 11, 0)
-- configure it for binary access
EXEC @hr = sp_oasetproperty @object, 'Type', 1
IF (@hr <> 0)
   RAISERROR('Failed to set stream type', 11, 0)
-- open the stream
EXEC @hr = sp_oamethod @object, 'Open'
IF (@hr <> 0)
   RAISERROR('Failed to open the stream object', 11, 0)
-- write the buffer to the stream
EXEC @hr = sp_oamethod @object, 'Write', NULL, @Data
IF (@hr <> 0)
   RAISERROR('Failed to write a buffer to the stream', 11, 0)
-- save the stream to a file with overwrite
EXEC @hr = sp_oamethod @object, 'SaveToFile', NULL, @Path, 2
IF (@hr <> 0)
   RAISERROR('Failed to save the stream to a file', 11, 0)
-- cleanup
EXEC sp_oadestroy @object

Обратите внимание, что доступ к файловой системе с помощью этого метода (и всех других известных мне в SQL2000) будет происходить в контексте безопасности процесса SQL Server, а не в вызывающей хранимой процедуре.

Если вам неудобно загружать компоненты ADO в процесс SQL Server, вы можете рассмотреть возможность реализации расширенной хранимой процедуры для записи ваших файлов.

...