Вставить в несколько таблиц на основе других данных таблицы - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно перебрать таблицу Organisation и вставить новую запись в User, основываясь на только что созданном идентификаторе пользователя, который мне нужно вставить в таблицы UserProductMapping, UserGroups

Select Code,Organisationid from organisation 

INSERT INTO User(userlogin,Organisationid,emailaddress,username,userpassword)
VALUES('AGT'+ Code, organisationid,'test@gmail.com','User'+ Code,'123')


INSERT INTO UserProductMapping (UserID, ProductID) VALUES (@userid, '11')
INSERT INTO UserProductMapping (UserID, ProductID) VALUES (@userid, '22')
INSERT INTO UserProductMapping (UserID, ProductID) VALUES (@userid, '33')
INSERT INTO UserProductMapping (UserID, ProductID) VALUES (@userid, '44')
INSERT INTO UserProductMapping (UserID, ProductID) VALUES (@userid, '55')

INSERT UserGroups values (@userid, 1)
INSERT UserGroups values (@userid, 3)

Мне нужно динамически передать Organisationid и кодв пользовательскую таблицу, чтобы пройти и вставить новую запись в пользователя после инерции пользовательских данных, я должен использовать userid для вставки в дочернюю таблицу.

, чтобы вставить в пользовательскую таблицу на основе организации:

INSERT INTO User (userlogin, Organisationid, emailaddress, username, userpassword)
SELECT 'AGT' + Code, organisationid, 'test@gmail.com', 'User' + Code, '123'
FROM organisation;

1 Ответ

0 голосов
/ 01 июня 2018

Как уже упоминалось в EzLo, вывод - ваш друг для получения вставленных значений идентичности:

-- use a table _temp_org_records for output
if object_id('_temp_org_records') is not null drop table _temp_org_records;

-- create table with correct column datatypes
select top 0 UserID
into _temp_org_records
from UserProductMapping


INSERT INTO User (userlogin, Organisationid, emailaddress, username, userpassword)
OUTPUT inserted.UserID INTO _temp_org_records --all USerIDs will be saved into _temp_org_records
    SELECT 'AGT' + Code, organisationid, 'test@gmail.com', 'User' + Code, '123'
    FROM organisation;

INSERT INTO UserProductMapping (UserID, ProductID) 
    SELECT t.UserID, productid.value
    FROM 
        _temp_org_records t
        cross join (values ('11'),('22'),('33'),('44'),('55')) as productid(value)

INSERT UserGroups 
    SELECT t.UserID, UserGroup.value
    FROM 
        _temp_org_records t
        cross join (values ('1'),('3')) as UserGroup(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...