<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=69572&amp;view=findpost&amp;p=486101</guid>
        <pubDate>Mon, 18 Oct 2004 13:35:26 +0000</pubDate>
        <title>[на редактирование] SQL-Server: запись файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=69572&amp;view=findpost&amp;p=486101</link>
        <description><![CDATA[Vit: SQL-Server: запись файла<br>
<br>
Пример простейшей процедуры на Transact-SQL, создающей файл и <br>
записывающий в неё что нибудь. Для этого используется WindowsScripting.<br>
WindowsScripting - если грубо - это набор OLE-объектов, которые можно использовать<br>
для целей управления системой. Их удобно использовать там, где невозможно достучаться<br>
к функциям Win32 API напрямую, например, в SQL Server-е.<br>
Ниже приводится исходник на Transact-SQL с комментариями, как это сделать<br>
Надеюсь, что он достаточно хорошо прокомментирован.<br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;</div><div class="code_line">DECLARE @FileName varchar(255), </div><div class="code_line">----текст, который необходимо записать в файл------------------------------------------</div><div class="code_line">@sFileText varchar(8000),</div><div class="code_line">&nbsp;</div><div class="code_line">----директория файла-------------------------------------------------------------------</div><div class="code_line">@sFileDir varchar(8000),</div><div class="code_line">&nbsp;</div><div class="code_line">----имя файла--------------------------------------------------------------------------</div><div class="code_line">@sFileName varchar(8000),</div><div class="code_line">&nbsp;</div><div class="code_line">@FS int, </div><div class="code_line">@FileID int, </div><div class="code_line">@hr int,</div><div class="code_line">@OLEResult int, </div><div class="code_line">&nbsp;</div><div class="code_line">@source varchar(30), </div><div class="code_line">@desc varchar (200),</div><div class="code_line">@bFolder bit</div><div class="code_line">&nbsp;</div><div class="code_line">---------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">--функция sp_OACreate создаёт OLE объект &#39;Scripting.FileSystemObject&#39;------------------</div><div class="code_line">EXECUTE @OLEResult = sp_OACreate &#39;Scripting.FileSystemObject&#39;, @FS OUTPUT</div><div class="code_line">&nbsp;</div><div class="code_line">--обязательно обработать ошибочные ситуации--------------------------------------------</div><div class="code_line">IF @OLEResult &#60;&#62; 0 </div><div class="code_line">BEGIN</div><div class="code_line">GOTO Error_Handler</div><div class="code_line">END</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">select @sFileDir = &#39;c:\&#39;</div><div class="code_line">select @sFileName = @sFileDir + &#39;123.log&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">/*</div><div class="code_line">у Scripting.FileSystemObject есть много интересных методов для работы с файлами </div><div class="code_line">и директориями, подробнее их можно подсмотреть, например, в MSDN.</div><div class="code_line">*/</div><div class="code_line">&nbsp;</div><div class="code_line">--проверить - существует ли заданная директория, для этого вызовем функцию &#39;FolderExists&#39;</div><div class="code_line">--ранее созданого OLE объекта--------------------------------------------------------</div><div class="code_line">execute @OLEResult = sp_OAMethod @FS,&#39;FolderExists&#39;,@bFolder OUT, @sFileDir</div><div class="code_line">IF @OLEResult &#60;&#62; 0 Or @bFolder = 0</div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp;--а если не существует - то создать её--------------------------------------------</div><div class="code_line">&nbsp;&nbsp;execute @OLEResult = sp_OAMethod @FS,&#39;CreateFolder&#39;,@bFolder OUT, @sFileDir</div><div class="code_line">&nbsp;&nbsp;IF @OLEResult &#60;&#62; 0 And @bFolder = 0</div><div class="code_line">&nbsp;&nbsp;BEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp;GOTO Error_Handler &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;END</div><div class="code_line">END</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">--создать файл----------------------------------------------------------------------</div><div class="code_line">execute @OLEResult = sp_OAMethod @FS,&#39;CreateTextFile&#39;,@FileID OUTPUT,@FileName</div><div class="code_line">IF @OLEResult &#60;&#62; 0 </div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp;GOTO Error_Handler</div><div class="code_line">END</div><div class="code_line">&nbsp;</div><div class="code_line">--создадим строку, которую будем записывать в файл----------------------------------</div><div class="code_line">set @sFileText = &#39;Hello first file!&#39; + char(0)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">-----------------записать строку в файл---------------------------------------------</div><div class="code_line">execute @OLEResult = sp_OAMethod @FileID, &#39;WriteLine&#39;, NULL, @sFileText</div><div class="code_line">IF @OLEResult &#60;&#62; 0 </div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp;GOTO Error_Handler</div><div class="code_line">END</div><div class="code_line">&nbsp;</div><div class="code_line">goto Done</div><div class="code_line">&nbsp;</div><div class="code_line">Error_Handler: &nbsp;--обработаем ошибку-------------------------------------------------</div><div class="code_line">EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT</div><div class="code_line">&nbsp;</div><div class="code_line">Done: &nbsp; &nbsp;</div><div class="code_line">--очистим за собой всяческий OLE-мусор----------------------------------------------</div><div class="code_line">EXECUTE @OLEResult = sp_OADestroy @FileID</div><div class="code_line">EXECUTE @OLEResult = sp_OADestroy @FS</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Автор AQL]]></description>
        <author>Vit</author>
        <category>Базы данных FAQ</category>
      </item>
	
      </channel>
      </rss>
	