2015-07-11 60 views
0

我正在寻找使用触发器删除数据库。这是因为我有一张保存客户端详细信息的表,当创建客户端时,为客户端创建数据库并将其所有数据保存在其数据库中。因此,删除客户端会留下孤立的数据库。客户端ID字段(guid)是数据库名称。任何帮助将不胜感激。SQL Server触发删除另一个数据库

到目前为止,这是我曾尝试:

CREATE TRIGGER DeletedClientDB 
ON systemclients 
FOR DELETE 
AS 
    DECLARE @db VARCHAR(50); 

    SET @db = (SELECT deleted.SystemClientID FROM deleted) 

    DROP DATABASE @db 
GO 

但不能得到正确的语法。

+0

你已经试过了什么? – byako

+0

您正在使用哪些DBMS?请使用适当的标签,可能会有更快的答案。 – Renzo

+0

我正在使用SQL 2012 – Santiago

回答

2

更新

阅读Martin Smith的意见后,我决定最好是彻底改变我的答案。我保留了以前的答案,以便评论不会丢失上下文。

结合marc_s评论和我自己的,我建议简单地将删除的ID插入到不同的表中,并有一个预定的作业从那里读取数据并删除数据库。

试试这个:

CREATE TRIGGER DeletedClientDB 

ON systemclients 

FOR DELETE 
AS 

DECLARE @dropdb VARCHAR(150); 

Select @dropdb = 'drop database ' + deleted.SystemClientID FROM deleted) 


Exec(@dropdb) 

GO 

注意,你需要滴数据库的权限为删除客户表中记录的用户。

+2

删除可能会影响多行。 –

+0

获取错误:“DROP DATABASE语句不能在用户事务中使用” – Santiago

+0

首先,Martin当然是正确的。其次,如果触发器位于事务中(如错误消息所示),则无法使用触发器删除数据库。还有其他一些可以完成的事情,比如将已删除的客户端ID插入到不同的表中,并让计划作业删除数据库并清理表格。这只是我脑海中浮现的第一件事,可能有更好的方法来处理这个问题。 –