有没有办法使用 into with delete 关键字将删除的行保存在 sql server 的临时表中?
2 回答
在不使用触发器的情况下,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 - 在删除之前保存数据的副本?
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