我的示例数据库中有两个表,分别称为:
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
4条答案
按热度按时间rsaldnfx1#
用于插入:
用于删除:
显然,在删除之前插入。
qoefvg9y2#
首先,我建议您使用Active/Inactive标志(只需在表中添加一点)。
如果这确实不是你想要的,你可以写一个SQL-trigger,应该看起来像这样:
这会在实际删除之前将所有删除的项目插入到ActiveProductst表中。如果这对于您要完成的任务来说太多了,您应该看看James的答案。
4ktjp1zp3#
当你删除一行的时候,它会返回一条记录。2试试这个。
正在创建新表:
CREATE TABLE archived_table_timestamp AS WITH deleted_rows as (DELETE FROM main_table RETURNING *)SELECT * FROM deleted_rows
;要插入到现有表中:
s1ag04yj4#
正如@Nick.McDermaid在评论中提到的那样,在product表上设置Inactive标志会更好。但是如果您仍然需要在表之间移动这些行,您可以使用OUTPUT子句来完成,只需 * 在一条语句中 *。
首先,我们将这些创建为表
其次,我们插入这些记录
第三,我们从#Active表中删除一些行,并将它们插入到#Passive表中
如果您需要更多有关OUTPUT子句的详细信息,请访问该链接:https://learn.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql