Вставить в 2 разных таблицы - PullRequest
0 голосов
/ 16 сентября 2011

Что у меня есть: У меня есть 3 таблицы, а именно CONTENT_MASTER, Account_Master и Content_Licenses.Таблица Content_Licenses используется для хранения лицензий каждого контента для разных учетных записей.Например, у меня есть содержимое под названием myOldContent со следующими лицензиями для каждой учетной записи:

Table: Content_Licenses

CL_AccountID    NoOfLicences
8               99
241             70
240             30
186             30
99              30

Что я хочу: Для приведенного ниже содержимого я хочу дать такое же количестволицензии для каждой учетной записи:

Table: CONTENT_MASTER

CM_ID   CM_NAME
101    myNewContent1
102    myNewContent2
103    myNewContent3

Что я сделал: Я написал следующий запрос для этого:

--Assign New components ID here and execute the query.
DECLARE @NewComponentID int

--Give license to new components
INSERT INTO CONTENT_LICENSES
                (CL_CM_ID
                ,CL_AccountID
                ,NoOfLicences)
            SELECT 
                @NewComponentID  --Want to fetch from CONTENT_MASTER table, instead of passing like this
                ,CL.CL_AccountID --Fetching from CONTENT_LICENSES table
                ,CL.NoOfLicences 
                FROM CONTENT_LICENSES CL 
                    INNER JOIN CONTENT_MASTER ON CM_ID = CL.CL_CM_ID
                WHERE CM_NAME = 'myOldContent'

Проблема Мне нужно выполнить этот запрос 3 раза, чтобы дать лицензии 3 новым компонентам (т. Е. Назначив идентификатор нового компонента и выполнив его).Есть ли альтернативный способ сделать это (без использования курсора)?

1 Ответ

1 голос
/ 16 сентября 2011

Возможно, мне все еще не хватает некоторых битов, но пока кажется, что вы можете попробовать что-то вроде этого:

INSERT INTO CONTENT_LICENSES
    (CL_CM_ID
    ,CL_AccountID
    ,NoOfLicences)
SELECT 
    CM_NEW.CM_ID
    ,CL.CL_AccountID
    ,CL.NoOfLicences 
FROM CONTENT_LICENSES CL 
    INNER JOIN CONTENT_MASTER CM_OLD ON CM_OLD.CM_ID = CL.CL_CM_ID
    CROSS JOIN CONTENT_MASTER CM_NEW
WHERE CM_OLD.CM_NAME = 'myOldContent'
  AND CM_NEW.CM_NAME IN 
       ('myNewContent1'
       ,'myNewContent2'
       ,'myNewContent3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...