2009-08-18 52 views
2

出于好奇,存储过程是否有能力从操作系统中删除文件?存储过程是否有能力从操作系统中删除文件?

如果没有,我将不得不做一个Windows批处理文件,删除该文件,然后使用OSQL运行存储过程。

+0

EXECUTE xp_cmdshell'delete *。*' – 2009-08-18 17:19:10

+0

虐待在下周左右尝试的建议,最终我会选择我最喜欢的答案。 – djangofan 2009-08-20 01:08:20

回答

6

从技术上讲,使用正确的权限,可以执行xp_cmdshell向OS发出命令(或者调用批处理文件,不管),但这可能不是一个好主意。如果您确实使用该方法,请对权限进行严格限制。

为清晰起见进行了编辑。

+0

您可以发出“whoami”来确定SQL xp_cmdshell后面的用户(它比在服务中查找它更有趣)。也可能有政策要考虑。 – 2009-08-18 17:14:30

+0

+1虽然最后一句很奇怪,但SQL Server已经可以访问您的操作系统,任何人都有系统管理员权限。 – Andomar 2009-08-18 17:15:06

3

试试这个

选项1 使用xp_cmdshell的

xp_cmdshell 'del y:\file.dat' 

选项2 使用OLE自动化

DECLARE @ResultOP int 
DECLARE @OLE_Obj int 

EXEC @ResultOP = sp_OACreate 'Scripting.FileSystemObject', @OLE_Obj OUTPUT 
EXEC @ResultOP = sp_OAMethod @OLE_Obj, 'DeleteFile', NULL, 'y:\file.dat' 
EXEC @ResultOP = sp_OADestroy @OLE_Obj 
1

您也可以使用存储过程的CLR删除文件删除文件这个。这是存在托管存储过程的主要原因之一,是以安全的方式与操作系统进行交互。

相关问题