2010-08-31 98 views
0

我有一个表(周期),我创建了一个触发如何在SQL Server 2008中使用备份与触发器?

alter trigger AnyName on Cycles 
for insert,update,delete 
AS 
BACKUP DATABASE medrepcrm TO DISK = N'C:\medrepcrm.bak' WITH NOFORMAT, INIT, NAME = N'pcrm-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 
GO 

但是当我插入,更新,或导致错误的周期表中删除。

Msg 3021, Level 16, State 0, Procedure AnyName, Line 8 
Cannot perform a backup or restore operation within a transaction. 
Msg 3013, Level 16, State 1, Procedure AnyName, Line 8 
BACKUP DATABASE is terminating abnormally. 
The statement has been terminated. 

我该如何解决这个错误?

+7

你为什么试图在触发器内执行备份? (如果我们了解动机,我们可以建议替代方案) – 2010-08-31 12:44:39

+2

我很惊讶BACKUP命令在触发器内甚至是有效的! – 2011-01-29 01:21:45

回答

2

BACKUP DATABASE MSDN上说

备份语句未显式或隐式事务允许的。

触发器是总是在交易

如果你的工作通过,备份是一个数据库的事务一致性快照:它没有意义它是在它自己的事务。

并不是不重要,恢复前滚/回退机制将不得不回滚包含备份......这违背了摆在首位备份的目的,交易...

-1

你可以启动工作sp_start_job。在作业内部执行存储过程,执行备份语句。我已经用一个服务器触发器完成了这个工作,当创建一个新的数据库时会触发它。