Запись файла

Previous  Top  Next

    
 

 

 

Пример простейшей процедуры на Transact-SQL, создающей файл и

записывающий в неё что нибудь. Для этого используется WindowsScripting.

WindowsScripting - если грубо - это набор OLE-объектов, которые можно использовать для целей управления системой. Их удобно использовать там, где невозможно достучаться к функциям Win32 API напрямую, например, в SQL Server-е.

Ниже приводится исходник на Transact-SQL с комментариями, как это сделать

Надеюсь, что он достаточно хорошо прокомментирован.

 

Code:

DECLARE @FileName varchar(255),

----текст, который необходимо записать в файл---

@sFileText varchar(8000),

 

----директория файла---

@sFileDir varchar(8000),

 

----имя файла----------

@sFileName varchar(8000),

 

@FS int,

@FileID int,

@hr int,

@OLEResult int,

 

@source varchar(30),

@desc varchar (200),

@bFolder bit

 

--функция sp_OACreate создаёт OLE объект 'Scripting.FileSystemObject'----

EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT

 

--обязательно обработать ошибочные ситуации---

IF @OLEResult <> 0

BEGIN

GOTO Error_Handler

END

 

 

select @sFileDir = 'c:\'

select @sFileName = @sFileDir + '123.log'

 

 

/*

у Scripting.FileSystemObject есть много интересных методов для работы с файлами

и директориями, подробнее их можно подсмотреть, например, в MSDN.

*/

 

--проверить - существует ли заданная директория, для этого вызовем функцию 'FolderExists'

--ранее созданого OLE объекта---

execute @OLEResult = sp_OAMethod @FS,'FolderExists',@bFolder OUT, @sFileDir

IF @OLEResult <> 0 Or @bFolder = 0

BEGIN

--а если не существует - то создать её----

execute @OLEResult = sp_OAMethod @FS,'CreateFolder',@bFolder OUT, @sFileDir

IF @OLEResult <> 0 And @bFolder = 0

BEGIN

   GOTO Error_Handler   

END

END

 

 

--создать файл---

execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT,@FileName

IF @OLEResult <> 0

BEGIN

GOTO Error_Handler

END

 

--создадим строку, которую будем записывать в файл---

set @sFileText = 'Hello first file!' + char(0)

 

 

-----------------записать строку в файл---

execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @sFileText

IF @OLEResult <> 0

BEGIN

GOTO Error_Handler

END

 

goto Done

 

Error_Handler:  --обработаем ошибку---

EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT

 

Done:   

--очистим за собой всяческий OLE-мусор----

EXECUTE @OLEResult = sp_OADestroy @FileID

EXECUTE @OLEResult = sp_OADestr

 

 

 

Автор AQL

©Drkb::02792

Взято из http://forum.sources.ru