当从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
答案 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中实现触发器。