使用into将删除信息保存到临时表

时间:2013-09-20 13:59:17

标签: sql sql-server

有没有办法使用delete关键字将已删除的行保存在sql server的临时表中?

2 个答案:

答案 0 :(得分:17)

不使用触发器,OUTPUT子句允许您执行此操作

-- create if needed
SELECT * INTO #KeepItSafe FROM TheTable WHERE 0 = 1;

--redirect the deleted rows to the temp table using OUTPUT
DELETE TheTable OUTPUT DELETED.* INTO #KeepItSafe WHERE ...;

答案 1 :(得分:0)

我想我的主要问题是你想做什么?

1 - 在删除之前保存数据副本?

SELECT / INTO后跟DELETE或DELETE OUTPUT模式都可以正常工作。

但为什么要保留数据?

2 - 如果您希望审核该表(插入,更新,删除),请查看我如何防止不需要的事务幻灯片w /代码 - http://craftydba.com/?page_id=880

审计表可以保存来自多个表的信息,因为数据保存为XML。因此,您可以根据需要取消删除。它跟踪谁和改变了什么。

3 - 如果是一次删除,我使用SELECT INTO后跟DELETE。在TRANSACTION中包装DELETE。检查已保存表中的复制数据。这样,可以回滚意外删除。

4 - 最后但并非最不重要的是,如果您永远不会从审计表或复制表中清除日期,为什么不将该行标记为已删除但仍保留该行?

许多系统如人们使用有效的约会来显示记录是否不再有效。在BI世界中,这被称为类型2维表(缓慢变化的维度)。

请参阅数据仓库机构文章。 http://www.bidw.org/datawarehousing/scd-type-2/

每条记录都有一个开始和结束日期。所有活动记录的结束日期均为空。


同样,所有上述解决方案都有效。

主要问题是业务需求是什么?

此致

约翰

狡猾的Dba