当我从数据库中删除相应的条目时,我们可以从服务器中删除物理文件吗?

时间:2012-01-18 09:13:45

标签: sql database sql-server-2008 file

当我从数据库中删除相应的条目时,我们可以从服务器中删除物理文件吗?

即,C:\ Test \ Test.txt - >从数据库中删除此记录时,我需要从提到的位置删除相应的Test.txt文件。 有没有办法,我使用的是SQL 2008。

任何帮助都会非常明显......

谢谢

3 个答案:

答案 0 :(得分:3)

方法是:

  • 使用xp_cmdshell proc(exec master..xp_cmdshell'del C:\ Test \ Test.txt')
  • 使用.NET CLR不安全的proc(需要用任何.NET语言编写并部署到sql server。这是一个很长的故事)

两种方式都很难看

再一次 - 这是最糟糕的做法。服务器不应删除用户文件或任何文件,因为它们不是其数据库的组成部分。

答案 1 :(得分:1)

您可以使用CREATE TRIGGER FOR DELETE创建在删除行时运行的触发器。删除时运行的SQL语句可以遍历表deleted以获取已删除的行。每行可以exec xp_cmdshell。默认情况下,xp_cmdshell处于禁用状态,因此您必须先使用exec sp_configure启用它。

答案 2 :(得分:1)

我没有对此进行过测试,但我认为它应该可行。

尝试编写一个以文件名作为参数的存储过程,并使用以下命令将其删除:

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

然后在包含调用存储过程的Filenames的表上创建一个触发器后触发器并从表 deleted 提供Filename,或者maby你可以直接运行命令exec master.dbo.xp_cmdshell来自触发器的'del'。

更好的方法是将文件保存为数据库中的对象而不是文件路径,删除时只删除文件对象。