Как обновить столбец на основе вставленных идентификаторов при использовании вставки выбрать? - PullRequest
0 голосов
/ 13 апреля 2011

Мне нужно обновить столбец в одной таблице с идентификаторами, сгенерированными после вставки в другую таблицу. Вот что у меня есть:

    tbl1 (id, tbl2id, col1, col2)
    tbl2 (id, col1, col2)

    insert into tbl2
    select col1, col2
    from tbl1
    where tbl1.tbl2id is null

На данный момент мне нужно заполнить tbl1.tbl2id с идентификатором для всех строк, которые были вставлены вышеприведенным оператором вставки, так что если приведенный выше оператор вставки будет запущен снова, у меня не будет дубликатов в tbl2. Я на SQL Server 2005.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Используйте предложение OUTPUT и временную таблицу.

Информация об условии OUTPUT находится здесь: http://msdn.microsoft.com/en-us/library/ms177564.aspx

Это должно выглядеть следующим образом:

CREATE TABLE #NewIDs (Tbl1Col1 INT, Tbl2ID INT)

insert into tbl2 (col1, col2)
OUTPUT inserted.col1, inserted.id INTO #NewIDs (Tbl1Col1, Tbl2ID)
  select col1, col2  
  from tbl1  
  where tbl1.tbl2id is null

UPDATE t
SET    t.tbl2id = tmp.Tbl2ID
FROM   Tbl1 t
INNER JOIN   #NewIDs tmp
        ON   tmp.Tbl1Col1 = t.Col1

Настоящий трюкгарантирует, что одно из полей, которые вы вставляете в Таблицу 2 из Таблицы 2, может быть использовано для ПРИСОЕДИНЕНИЯ, поэтому мы надеемся, что оно уникально или достаточно уникально.Единственное реальное осложнение состоит в том, что идентификатор для таблицы 1 не является частью запроса, выполняющего операцию INSERT, поэтому он не доступен для предложения OUTPUT.

0 голосов
/ 13 апреля 2011

Используя триггер, вы можете сделать

CREATE TRIGGER trigger_name 
ON tbl2
AFTER INSERT
AS 
     INSERT tbl1 (tbl2id, col1, col2)
     SELECT id, col1, col2 
     FROM inserted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...