2010-07-30 3 views
1

SQL Server에서 특정 데이터베이스를 삭제할 때 일부 텍스트 파일을 삭제해야합니다 (오래된 데이터와 관련된 데이터가 포함되어 있기 때문에). 나는 쿼리를 실행하기 위해 어떤 종류의 방아쇠를 사용할 수 있다고 생각했지만, 어디에 넣을 지, 어떻게해야 하는지를 알 수 없다.SQL Server에서 데이터베이스를 삭제하면 코드가 실행됩니까?

SQL 서버 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 
+0

업데이트를 보았습니다. 당신은 CLR을 사용하는 것이 더 좋을지 모르지만, 당신의 OLE 오브젝트가 파괴되지 않을 가능성이있는 문제를 피하는 것이 좋습니다. 적어도 파괴를 시도한 채로 잡아 당겨서 잡아 당기는 것이 좋습니다. 오브젝트가 생기면 어떻게 될지 잘 모르겠습니다. 현재 deletefile 줄에 오류가 있습니다. 비슷한 CLR 함수가 여기에 있습니다. http://www.mssqltips.com/tip.asp?tip=1374 –

+0

e- 나는 또한 내 대답을 어떻게 업데이트 할 것인가에 대한 예제를 업데이트했습니다. 목표 데이터베이스가 h 제됩니다. –

+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 
-3

예. 이 아이디어를 잊어서 지원되는 것을 찾으십시오.

다음으로 : 안돼. 나는 당신의 DB를 (관리자로서) 버리고, 당신은 db로서 죽었다. 포인트.

또한 exe가 삭제 될 때 작업을 수행하는 exe에 트리거를 구현할 수 없습니다.

+3

DDL 트리거에 대해 들어 본 적이 있습니까? (마틴 스미스의 대답을보세요). – pastacool

관련 문제