如何在SQL的另一个表中插入已删除的行

时间:2018-08-21 04:52:48

标签: c# asp.net

我的示例数据库中有两个表。这些称为:

  1. 有效产品。
  2. 无效产品

在我的asp表单中,我有两个列表框和一个下拉列表。

DropDown列表:类别。

当我在下拉列表中选择任何一种类别(如奶类产品)时,它将在左侧类别中的列表下方显示这些产品。

  1. 产品启用。 -[左侧]
  2. 激活的产品。 -[右侧]

我曾经使用按钮来移动列表项以进行左右移动。当我单击更新按钮时,它将带走右侧列表框中包含的列表项,并将这些项插入名为Active Products.的第一个表

现在,我在右侧选择两个列表项,然后将它们移到左侧列表框,然后单击“更新”按钮,这将在第二个表中更新这些移动项。我该怎么做?

有效表:

Categoryid | Produtid
-----------+-----------     
   1            1   
   1            5
   1            6

例如,如果我选择第一个类别,则如果在左侧移动Productid 5 and 6,则相应的产品将显示在右侧。

它将在此表中被删除,并在不活动表上更新。

我的预期输出将如下所示,如何编写函数以获取此输出。有人请引导我。预先感谢,

有效表:

Categoryid | Produtid
-----------+---------
   1            1   

无效表:

Categoryid | Produtid
-----------+----------
   1            5   
   1            6

3 个答案:

答案 0 :(得分:1)

用于插入:

INSERT INTO InactiveTable
SELECT * FROM ActiveTable WHERE RowId = "<insert rowid>"

要删除:

DELETE FROM ActiveTable
WHERE RowId = "<insert rowid>"

显然在删除之前插入

答案 1 :(得分:0)

首先,我建议您使用Active / Inactive标志(只需向表中添加一点)。

如果这不是您真正想要的,则可以编写一个SQL触发器。应该看起来像这样:

 CREATE TRIGGER dbo.SetActiveProductToInactive
    ON dbo.ActiveProducts
    FOR DELETE
AS
    INSERT INTO dbo.InactiveProducts
    SELECT * FROM deleted
GO

这将所有删除的项目插入到ActiveProducst表中,然后再实际删除它们。如果这对于您要完成的任务来说太大了,那么您应该看看詹姆斯的回答。

答案 2 :(得分:0)

当您删除行时,它将返回记录。试试这个。

创建新表:

CREATE TABLE archived_table_timestamp AS WITH deleted_rows as (DELETE FROM main_table RETURNING *)SELECT * FROM deleted_rows;

要插入现有表中:

WITH deleted_rows as (
DELETE FROM active_table WHERE 'condition' RETURNING *
)
INSERT INTO archived_table SELECT * FROM deleted_rows;