從T-SQL中可以透過很多方式去對文件檔案系統做操作,
常見的就是SQLCMD, CLR, OA...等等.
要在安全性的考量下, 我會選擇功能較少的OA.
/* 不知為何這篇貼程式碼時貼不上, 所以貼圖 */
SQL Server提供了不少對檔案存取的方式,讓程序在開發的過程中,能快速的調用檔案或是寫入檔案。最常見到的一個情境,就是application在執行的過程中會記錄內容到文字檔案中,同時調用連續的資料庫store procedure又是必要的,此時就會需要在store procedure中寫入記錄到文字檔案中,讓記錄呈現連續性。
/**以下先不討論權限問題,假設權限都是配置完成的**/
不過在過去的經驗中,遇到蠻多程序是透過xp_cmdshell去調用batch檔案,再透過batch去將記錄寫到文字檔案中。可是在眾多的文件中,都提及了xp_cmdshell開啟後,在資安上是有一定的風險的。
因此,使用OLE Automation就成了適合的方案了。來看看如何透過OLE Automation在store procedure中將記錄寫入到文字檔案中吧!
首先要先開啟Ole Automation Procedure,這個操作需要Administration的權限唷~
有關Ole Automation Procedure的設定,可以參考Ole Automation Procedures 選項
之後就可以建立程序,透過Ole Automation procedures來存取檔案,這類共用的程式,可視需求放在各別使用者資料庫中,或是放到系統資料庫 (master or msdb) 中。
有關Ole Automation的適用語法,可以參考OLE Automation 範例指令碼
再來就是調用程序,值得注意的是,要寫入的目錄要先建立起來,但是檔案則是不存在時建立,檔案存在時將文字寫入 (上例程序是附加)。
最後可以去檢查看看目錄下的檔案內容。
這個功能可以在T-SQL中去寫入檔案系統,然而並不建議在交易式程序中執行,相信多數人會不能容忍線上交易程序在資料庫procedure中去開啟檔案。這個功能比較適合運用在開發測試階段、排程性作業、檔案管理(例如備份)… 等時機。
下列是還原範例設定與移除範例物件的語法。