asp.net 如何在sql中将已删除的行插入到另一个表中

beq87vna  于 2023-01-06  发布在  .NET
关注(0)|答案(4)|浏览(115)

我的示例数据库中有两个表,分别称为:
1.活性产品。
1.非活性产品
在我的asp表单中,我有两个列表框和一个下拉列表。
下拉列表:类别。
当我在下拉列表中选择任何一个类别,如奶制品,它会显示这些产品在我左边的类别列表。
1.激活产品。-[左侧]
1.已激活产品。-[右侧]
我使用按钮来移动列表项,用于向左和向右移动。当我单击更新按钮时,它将获取右侧列表框中包含的列表项,并将这些项插入名为Active Products.的第一个表中
现在我选择了右边的两个列表项,然后将它们移到左边的列表框中,单击更新按钮,移动的项将在第二个表中更新。我该怎么做?

    • 活动**表格:
Categoryid | Produtid
-----------+-----------     
   1            1   
   1            5
   1            6

例如,如果我选择第一个类别,相应产品显示在右侧,如果我移动左侧的Productid 5 and 6
它将在此表中删除,并在非活动表中更新。
我的预期输出将是这样的,如何写函数得到这个输出。有人请指导我。提前感谢,

    • 活动**表格:
Categoryid | Produtid
-----------+---------
   1            1
    • 非活动**表格:
Categoryid | Produtid
-----------+----------
   1            5   
   1            6
rsaldnfx

rsaldnfx1#

用于插入:

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

用于删除:

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

显然,在删除之前插入

qoefvg9y

qoefvg9y2#

首先,我建议您使用Active/Inactive标志(只需在表中添加一点)。
如果这确实不是你想要的,你可以写一个SQL-trigger,应该看起来像这样:

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

这会在实际删除之前将所有删除的项目插入到ActiveProductst表中。如果这对于您要完成的任务来说太多了,您应该看看James的答案。

4ktjp1zp

4ktjp1zp3#

当你删除一行的时候,它会返回一条记录。2试试这个。
正在创建新表:
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;
s1ag04yj

s1ag04yj4#

正如@Nick.McDermaid在评论中提到的那样,在product表上设置Inactive标志会更好。但是如果您仍然需要在表之间移动这些行,您可以使用OUTPUT子句来完成,只需 * 在一条语句中 *。
首先,我们将这些创建为表

create table #Active (Categoryid int, Productid int);
create table #Inactive (Categoryid int, Productid int);

其次,我们插入这些记录

insert into #Active (Categoryid, Productid) values (1, 1), (1, 5), (1, 6);

第三,我们从#Active表中删除一些行,并将它们插入到#Passive表中

delete  t
output  deleted.*
into    #Inactive
from    #Active AS t
where   t.Productid in (5, 6);

如果您需要更多有关OUTPUT子句的详细信息,请访问该链接:https://learn.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql

相关问题