从SQL Server中删除数据库时运行一些代码?

时间:2010-07-30 08:24:00

标签: sql-server

当从SQL服务器中删除某个数据库时,我需要删除一些文本文件(因为它们包含过期的关联数据)。我有一个想法,我可以使用某种触发器运行查询来做到这一点,但我无法弄清楚在哪里或如何做到这一点。

我正在使用SQL Server 2005,但随着时间的推移可能会升级。

有什么想法吗?

感谢,

杰米

感谢Martin Smith,以下是我使用的代码:

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

2 个答案:

答案 0 :(得分:3)

我认为你需要一个服务器作用域DDL trigger。我不确定如何删除TSQL中的文本文件。看起来这里有some ideas。或者也许您可以从执行清理的触发器调用SSIS包。

CREATE TRIGGER ddl_trig_database 
ON ALL SERVER 
FOR DROP_DATABASE 
AS 

IF EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
                                                   'nvarchar(max)') = 'myDbName'
BEGIN
/*Some code here*/    
END

答案 1 :(得分:-3)

是。忘记这个想法,找到一个受支持的想法。

如同:没有办法。我丢弃你的数据库(作为管理员),你死了像db。点。

当exe被删除时,也无法在exe中实现触发器。