- ベストアンサー
MS-SQLプロシージャでファイルを削除する方法
- SQL Server 2005のプロシージャでテーブルの削除、CSVファイルの取り込み、ファイルの削除を行いたいと思っています。
- テーブル削除とCSVファイルのインポートはできましたが、ファイルの削除ができません。
- このプロシージャ内でテキストファイルを削除する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
拡張ストアドの xp_cmdshell で可能です。 但し、この拡張ストアドは SQL-Server ユーザーがコマンドラインで実行可能な全ての行為を行なう事ができてしまいます。 それくらい危険極まりないので、デフォルトでは使えないようになっています。 (かつて猛威を振るったワーム型ウイルス Slammer は、確かこの xp_cmdshel を内部で使っていました) 使い方は以下、MSDNを参考に。 xp_cmdshell (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms175046.aspx xp_cmdshell オプション http://msdn.microsoft.com/ja-jp/library/ms190693.aspx 企業やプロジェクトによっては、セキュリティの観点から xp_cmdshell の使用を禁止している場合があるかもしれません。 xp_cmdshell 以外にも方法はいくつか考えられます。 ■ストアドからDTSをキックする 自分はやった事無いですが(もしくは忘れてしまいましたが)多分、DTSが使えるのであればファイルの削除も可能でしょう。 ■OLE オブジェクトを使う 例えば、VB(VBA、VBS)などでファイルシステムを扱う場合、 CreateObject("Scripting.FileSystemObject") のように書きます。 これと同じ事をTransact-SQLでは sp_OACreate 'Scripting.FileSystemObject' と表現できます。 つまり、Scripting.FileSystemObjectの DeleteFile メソッドもストアドから実行できる、と言う事です。 こちらの方法は自分もやった事があります 結構ハマり、後々のお守りも大変だった記憶があります。 セキュリティの制限さえ無ければ、xp_cmdshell が一番楽チンです。
お礼
ありがとうございます。 やはりプロシージャ内でファイルを削除するには危険が伴うことがわかりました。 そのため、プロシージャを使わずにASP.NET側でデータのインポート⇒ファイルの削除をするようにいたしました。