У меня есть две таблицы в моей базе данных. Они называются:

  1. Активные продукты.
  2. Неактивные продукты

В моей форме asp у меня есть два списка и выпадающий список.

DropDown List: Категория.

Когда я выбираю какую-либо одну категорию, например, молочные продукты, в раскрывающемся списке, эти продукты отображаются в списке в категории на левой стороне.

  1. Продукты для Active. - [ Левая сторона ]
  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
2
vinayak vk 21 Авг 2018 в 07:52

3 ответа

Лучший ответ

Для вставки:

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

Для удаления:

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

Очевидно, что вставьте перед удалением .

1
jamesfdearborn 21 Авг 2018 в 05:33

Прежде всего, я бы предложил вам использовать флаг Active / Inactive (просто добавьте немного в вашу таблицу).

Если это действительно не то, что вы хотите, вы можете написать SQL-триггер. Должно выглядеть примерно так:

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

Это вставит все удаленные элементы в вашу таблицу ActiveProducst перед их фактическим удалением. Если это слишком много для того, что вы пытаетесь достичь, вы должны посмотреть на ответ Джеймса.

0
Peter Beukema 21 Авг 2018 в 06:48

При удалении строки возвращает запись. Попробуй это.

Создание новой таблицы:

CREATE TABLE archived_table_timestamp AS WITH Удаленные_ строки как (УДАЛИТЬ ИЗ main_table ВОЗВРАЩАЕТСЯ *) SELECT * ИЗ удаленных_строк ;

Вставить в существующую таблицу:

WITH deleted_rows as (
DELETE FROM active_table WHERE 'condition' RETURNING *
)
INSERT INTO archived_table SELECT * FROM deleted_rows;
0
shashwat srivastava 5 Мар 2020 в 06:16
51941763