【问题标题】:How to insert deleted rows in another table in sql如何在sql中的另一个表中插入已删除的行
【发布时间】:2020-03-05 14:16:39
【问题描述】:

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

  1. 有源产品。
  2. 非活动产品

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

下拉列表:类别。

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

  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

【问题讨论】:

  • 我建议您改为在产品表上创建一个Inactive 标志,而不是复制整个表
  • 您的示例数据库设计错误。正如 Nick.McDermaid 所写,您应该有一个产品表,其中有一个位列表示产品是否处于活动状态。

标签: c# asp.net


【解决方案1】:

用于插入:

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

删除:

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

显然在删除之前插入

【讨论】:

    【解决方案2】:

    首先,我建议您使用活动/非活动标志(只需在您的表格中添加一点)。

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

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

    这会将所有已删除的项目插入到您的 ActiveProducst 表中,然后再实际删除它们。如果这对于您想要完成的任务来说太过分了,您应该看看 James 的回答。

    【讨论】:

      【解决方案3】:

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

      创建新表:

      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;
      

      【讨论】:

        猜你喜欢
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多