Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当我从数据库中删除相应条目时,是否可以从服务器中删除物理文件?_Sql_Database_Sql Server 2008_File - Fatal编程技术网

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

Sql 当我从数据库中删除相应条目时,是否可以从服务器中删除物理文件?,sql,database,sql-server-2008,file,Sql,Database,Sql Server 2008,File,当我从数据库中删除相应条目时,是否可以从服务器中删除物理文件 i、 例如,C:\Test\Test.txt->从数据库中删除此记录时,我需要从提到的位置删除相应的Test.txt文件。 有没有办法,我用的是SQL 2008 任何帮助都是值得感激的 谢谢方法如下: 使用xp\u cmdshellproc(exec master..xp\u cmdshell“del C:\Test\Test.txt”) 使用.NET CLR不安全过程(需要使用任何.NET语言编写并部署到sql server。这是

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

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

任何帮助都是值得感激的

谢谢

方法如下:

  • 使用
    xp\u cmdshell
    proc(exec master..xp\u cmdshell“del C:\Test\Test.txt”)
  • 使用.NET CLR不安全过程(需要使用任何.NET语言编写并部署到sql server。这是一个很长的过程)
两种方式都是丑陋的


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

您可以使用
CREATE TRIGGER FOR delete
创建删除行时运行的触发器。删除时运行的SQL语句可以遍历表
deleted
,以获取删除的行。对于每一行,它都可以
exec xp\u cmdshell
。xp\u cmdshell在默认情况下是禁用的,因此您必须首先使用
exec sp\u configure

启用它。我没有测试过它,但我认为它应该可以工作

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

exec master.dbo.xp_cmdshell 'del <Filename>'
exec master.dbo.xp\u cmdshell“del”
然后在包含调用存储过程的文件名的表上为after delete创建一个触发器,并从表deleted中提供文件名,或者您可以直接从触发器运行命令exec master.dbo.xp\u cmdshell“del”


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

任何指针。。如何使用xp_cmdshell或.NET CLR unsafe proc删除文件。这应该在应用程序级别上处理,而不是在数据库级别上处理。是的,有很多方法可以做到这一点,但这不是一个好的做法。