我的示例数据库中有两个表。这些称为:
在我的asp表单中,我有两个列表框和一个下拉列表。
DropDown列表:类别。
当我在下拉列表中选择任何一种类别(如奶类产品)时,它将在左侧类别中的列表下方显示这些产品。
我曾经使用按钮来移动列表项以进行左右移动。当我单击更新按钮时,它将带走右侧列表框中包含的列表项,并将这些项插入名为Active Products.
的第一个表
现在,我在右侧选择两个列表项,然后将它们移到左侧列表框,然后单击“更新”按钮,这将在第二个表中更新这些移动项。我该怎么做?
有效表:
Categoryid | Produtid
-----------+-----------
1 1
1 5
1 6
例如,如果我选择第一个类别,则如果在左侧移动Productid 5 and 6
,则相应的产品将显示在右侧。
它将在此表中被删除,并在不活动表上更新。
我的预期输出将如下所示,如何编写函数以获取此输出。有人请引导我。预先感谢,
有效表:
Categoryid | Produtid
-----------+---------
1 1
无效表:
Categoryid | Produtid
-----------+----------
1 5
1 6
答案 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;