Как обновить 2-ю таблицу со значением идентификатора вставленных строк в 1-ю таблицу - PullRequest
2 голосов
/ 22 мая 2011

У меня есть следующие структуры таблиц

CREATE TABLE [dbo].[WorkItem](
    [WorkItemId] [int] IDENTITY(1,1) NOT NULL,
    [WorkItemTypeId] [int] NOT NULL,
    [ActionDate] [datetime] NOT NULL,
    [WorkItemStatusId] [int] NOT NULL,
    [ClosedDate] [datetime] NULL,
)

CREATE TABLE [dbo].[RequirementWorkItem](
    [WorkItemId] [int] NOT NULL,
    [RequirementId] [int] NOT NULL,
)

CREATE TABLE #RequirmentWorkItems
(
    RequirementId int,
    WorkItemTypeId int,
    WorkItemStatusId int,
    ActionDate datetime
)

Я использую таблицу #RequirmentWorkItems для создания рабочих элементов для требований. Затем мне нужно вставить рабочие элементы в таблицу WorkItem и использовать значения идентификаторов из таблицы WorkItem для создания строк перекрестных ссылок в таблице RequirementWorkItem.

Есть ли способ сделать это без курсора в каждом ряду? И я не могу поместить RequirementId в таблицу WorkItem, потому что в зависимости от WorkItemTypeId WorkItem может быть связан с Requirement, Notice или Event.

Так что на самом деле есть 3 таблицы внешних ссылок для WorkItems. Или было бы лучше поместить RequirementId, NoticeId и EventId в таблицу WorkItem, и один из столбцов будет иметь значение, а другие 2 будут нулевыми? Надеюсь, все это имеет смысл. Спасибо.

1 Ответ

3 голосов
/ 22 мая 2011

Вы должны прочитать MERGE и OUTPUT - швейцарский армейский нож T-SQL для получения дополнительной информации об этом.

Сегодня я наткнулся на другое использование этого, возвращая значения, используя предложение OUTPUT из таблицы, используемой в качестве источника данных для вставки. Другими словами, если я вставляю из [tableA] в [tableB], то я могу захотеть получить некоторые значения из [tableA] после факта, особенно если [tableB] имеет идентичность. Обратите внимание на мою первую попытку с использованием прямой вставки, когда я пытаюсь получить поле из @source. [Id], которое не используется при вставке:

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