2012-01-18 29 views
3

データベースから対応するエントリを削除すると、物理ファイルをサーバから削除できますか?データベースから対応するエントリを削除すると、物理ファイルをサーバから削除できますか?

つまり、C:\ Test \ Test.txt - >このレコードをデータベースから削除する場合、上記の場所から対応するTest.txtファイルを削除する必要があります。 方法はあります、私は...任意のヘルプは非常にかなりのだろうSQLに

おかげ

+0

これは、データベースレベルではなく、アプリケーションレベルで処理する必要があります。はい、それを行う方法はありますが、それは良い習慣ではありません。 – Ilion

答えて

2

の方法があり、2008年

を使用してメートル:xp_cmdshell PROC(execをマスターの

  • 使用を..xp_cmdshell 'del C:\ Test \ Test.txt')
  • .NET CLRの安全でないprocを使用する(任意の.NET言語で記述し、SQL Serverにデプロイする必要がある、その長い話)

どちらの方法

そして再び醜いです - それは最悪の練習です。サーバーは、ユーザーファイルまたはファイルを削除してはなりません。それらは、データベースの不可欠な部分ではありません。

+0

任意のポインタ..ファイルを削除するためにxp_cmdshellまたは.NET CLR unsafe procを使用する方法。 –

+0

更新された回答を参照してください –

+0

ありがとうOleg Dok –

1

CREATE TRIGGER FOR DELETEを使用すると、行が削除されたときに実行されるトリガーを作成できます。削除時に実行されるSQL文は、テーブルdeletedを通って削除された行を取得できます。各列については、exec xp_cmdshellとすることができる。 xp_cmdshellはデフォルトで無効になっているため、最初にexec sp_configureを使用してxp_cmdshellを有効にする必要があります。

1

私はこれをテストしませんでしたが、うまくいくはずです。

パラメータとしてファイル名を持つストアドプロシージャを書いてみて、使用してそれを削除します。後に、ストアドプロシージャを呼び出し、提供してファイル名を含むテーブルの上に削除するために

exec master.dbo.xp_cmdshell 'del <Filename>' 

はその後、トリガーを作成しますテーブルのファイル名が、またはmabyから削除された場合、トリガーからexec master.dbo.xp_cmdshell 'del'コマンドを直接実行できます。

より良い方法は、ファイルパスの代わりにデータベースにオブジェクトとしてファイルを保存し、削除するときにファイルオブジェクトを削除することです。

関連する問題