6

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

4

2 回答 2

23

在不使用触发器的情况下,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 ...;
于 2013-09-20T14:01:48.270 回答
0

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

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

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

但是为什么要保留数据?

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

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

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

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

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

请参阅数据仓库研究所的文章。 http://www.bidw.org/datawarehousing/scd-type-2/

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


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

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

真挚地

约翰

狡猾的 Dba

于 2013-09-20T14:21:34.403 回答