У меня есть две таблицы в моей базе данных. Они называются:
- Активные продукты.
- Неактивные продукты
В моей форме asp у меня есть два списка и выпадающий список.
DropDown List: Категория.
Когда я выбираю какую-либо одну категорию, например, молочные продукты, в раскрывающемся списке, эти продукты отображаются в списке в категории на левой стороне.
- Продукты для Active. - [ Левая сторона ]
- Активированные продукты. - [ Правая сторона ]
Я использовал кнопки для перемещения элементов списка для перемещения влево и вправо. Когда я нажимаю кнопку обновления, он возьмет элементы списка, которые находятся в правом списке, и вставит эти элементы в первую таблицу с именем Active Products.
Теперь я выбираю два элемента списка с правой стороны и перемещаю их в список слева и нажимаю кнопку обновления, перемещенные элементы обновляются во второй таблице. Как мне это сделать?
Активная таблица:
Categoryid | Produtid
-----------+-----------
1 1
1 5
1 6
Пример, если я выбираю первую категорию, соответствующие продукты отображались справа, если я перемещаю Productid 5 and 6
слева.
Он будет удален в этой таблице и обновлен в неактивной таблице.
Мой ожидаемый вывод будет выглядеть так: как написать функцию для получения этого вывода. кто-нибудь, пожалуйста, ведите меня. Заранее спасибо,
Активная таблица:
Categoryid | Produtid
-----------+---------
1 1
Неактивная таблица:
Categoryid | Produtid
-----------+----------
1 5
1 6
3 ответа
Для вставки:
INSERT INTO InactiveTable
SELECT * FROM ActiveTable WHERE RowId = "<insert rowid>"
Для удаления:
DELETE FROM ActiveTable
WHERE RowId = "<insert rowid>"
Очевидно, что вставьте перед удалением .
Прежде всего, я бы предложил вам использовать флаг Active / Inactive (просто добавьте немного в вашу таблицу).
Если это действительно не то, что вы хотите, вы можете написать SQL-триггер. Должно выглядеть примерно так:
CREATE TRIGGER dbo.SetActiveProductToInactive
ON dbo.ActiveProducts
FOR DELETE
AS
INSERT INTO dbo.InactiveProducts
SELECT * FROM deleted
GO
Это вставит все удаленные элементы в вашу таблицу ActiveProducst перед их фактическим удалением. Если это слишком много для того, что вы пытаетесь достичь, вы должны посмотреть на ответ Джеймса.
При удалении строки возвращает запись. Попробуй это.
Создание новой таблицы:
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;
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.