Вставить в 1-ю таблицу и обновить запись во 2-й таблице с помощью одного запроса (SQL Server) - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть две таблицы table1 и table2.

В таблице 1, в которой столбцы имеют id и cardId, а в таблице 2 столбцы cardId и UserId

Мне нужен один запрос, который будетвставьте запись в table1, затем обновите UserId в table2 на базе cardId

Ответы [ 3 ]

0 голосов
/ 22 сентября 2019

Вы можете сделать это, если используете процедуры в sql-сервере.Вы можете создать процедуру с несколькими запросами SELECT, INSERT, DELETE, UPDATE ... После того, как вы только выполните время, он выполнит весь ваш запрос.Вы можете найти процедуры в: w3schools

0 голосов
/ 22 сентября 2019

Вы можете использовать триггер, который обновит строку во второй таблице, когда вставка произойдет в первой таблице.Так как неясно, какой идентификатор пользователя во втором столбце должен быть установлен для триггера ниже, используется функция USER () и может быть изменен при необходимости.

Настройка данных

Insert into Table2 (cardId, userId) values (1,null)

Триггер

Create trigger update_user after insert on Table1
For each row
Update Table2 set userId = USER() WHERE cardId = NEW.cardId

Тестовые данные

Insert into Table1 (id, cardId) values(1,1)

При выполнении вставки тестовых данных, приведенной выше, столбец userId в Table2 будет установлен в userId, возвращаемый USER() функция

0 голосов
/ 22 сентября 2019

При определении ваших таблиц cardId в table1 должен действовать как первичный ключ для cardId в table2.Таким образом, когда вы создаете table1 и table2 (при условии, что все имеют тип integer), оно должно выглядеть следующим образом

Create table Table1
(id int,
cardId int primary key)

Create table Table2
(CardId int foreign key references table1(cardId) on update cascade,
UserId int)

Как видите, я использовал on update cascade с cardIdв table2.Таким образом, когда вы обновляете определенное значение cardId в table1, оно автоматически обновляется в table2 Например, этот следующий оператор изменит cardId в table1 и автоматически в table2от 30 до 32.

Update table1 set cardId=30 where cardId=32

Хотя вышеприведенный оператор пытается обновить cardId только в table1, но поскольку мы использовали on update cascade при определении cardId в table2, cardIdв table2 будет автоматически обновляться.Надеюсь, что это отвечает на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...