SQL Server 05: вставка в новую таблицу и получение идентификатора из старого и вновь созданного идентификатора из нового - PullRequest
1 голос
/ 09 марта 2011

У меня есть 3 таблицы, одна из которых уже заполнена данными, а две совершенно новые.

Мой первый стол (предварительно заполненный) выглядит так:

commentId, commentText, user_id, moderated, isDeleted, date_created

Мой второй стол выглядит так:

ActionID, moderated, isDeleted, reasonText, isReffered, isAllowed

и мой третий стол выглядит так:

ID, ActionID, CommentID

То, что я хотел бы сделать, это:

Insert into ActionTable (moderated, isDeleted)
Select moderated, isDeleted
From CommentTable

и возьмите исходный комментарий ID и недавно созданный ActionID для вставки в мою третью таблицу ActionCommentLink

Приветствует всех.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Я полагаю, у вас есть автоидентификация на ActionID?

Зачем вам нужна ActionCommentLink?На основе описанного вами процесса нет отношения n: m (пока).

Если это одноразовое усилие, самым быстрым способом было бы временно добавить столбец commentId в ActionTableи заполните его вставкой.Если вам на самом деле не нужен ActionCommentLink, вы уже сделали.В противном случае запросите ActionTable для заполнения ссылки, затем удалите commentId из ActionTable.

Если вам нужно сделать это более одного раза, используйте курсор и используйте функцию @@Identity для запросапоследний вставленный ActionID

0 голосов
/ 09 марта 2011

Просто используйте OUTPUT.Это прямо из файла справки:

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table( NewScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());

--Display the result set of the table variable.
SELECT NewScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
--Display the result set of the table.
SELECT ScrapReasonID, Name, ModifiedDate 
FROM Production.ScrapReason;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...