从SQL服务器中删除某个数据库(因为它们包含的关联数据已过时),我需要删除一些文本文件。我有一个想法,我可以使用某种触发器来运行查询来做到这一点,但我无法弄清楚该怎么做或如何去做。当我的数据库从SQL Server中删除时运行一些代码?
我正在使用SQL Server 2005,但随着时间的推移可能会升级。
任何想法?
感谢,
杰米
感谢马丁·史密斯,这里是我使用的代码:
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR DROP_DATABASE
AS
DECLARE @database_count int
select @database_count=count(*) from sys.databases where name='myDbName'
IF @database_count = 0
BEGIN
-- Our database has been dropped, delete text files
DECLARE @Result int
DECLARE @FSO_Token int
EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT
EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile', NULL, 'D:\afile.txt'
EXEC @Result = sp_OADestroy @FSO_Token
END
我也只好跑这使OLE自动化删除:
exec sp_configure
go
exec sp_configure 'Ole Automation Procedures', 1
-- Configuration option 'Ole Automation Procedures' changed from 0 to 1.
go
reconfigure
go
刚刚看到您的更新。你可能会更好地使用CLR来避免任何可能的问题,因为你的ole对象不会被销毁 - 或者至少是在试图捕获摧毁进来的东西的时候。我不确定如果你得到的东西会发生什么目前在deletefile行上有一个错误。有一个示例CLR函数,在这里执行类似的操作http://www.mssqltips.com/tip.asp?tip=1374 – 2010-07-30 10:03:24
e-我也更新了我的答案,举例说明如何让它只在您的目标数据库被删除。 – 2010-07-30 10:14:35
谢谢你,优秀的信息:) – 2010-07-30 10:17:51