Вставить сгенерированный идентификатор записи ссылки с необязательной ссылкой в ​​другую таблицу - PullRequest
0 голосов
/ 25 марта 2011

Я пытаюсь запросить 2 таблицы, чтобы сгенерировать записи для третьей таблицы, которая только иногда ссылается на обе другие таблицы, и вставить идентификатор, сгенерированный для третьей таблицы, в четвертую таблицу, которую я могу использовать для предотвращения повторногогенерация, если уже сгенерированы записи в третьей таблице.Ниже приведен упрощенный пример того, что я пытаюсь сделать.

create table #T1(id1 int primary key identity(100,1) not null, value nvarchar(10))
create table #T2(id2 int primary key identity(200,1) not null, value nvarchar(10))
insert into #T1(value) values('a')
insert into #T1(value) values('b')
insert into #T1(value) values('c')
insert into #T2(value) values('c')
insert into #T2(value) values('b')
insert into #T2(value) values('d')
create table #T3(id3 int primary key identity(300,1) not null, id2 int null, value nvarchar(10))
create table #T3Info(id1 int not null, id3 int not null)

insert into #T3(id2, value)
output inserted.id2
,#T1.id1
into #T3Info(id1, id3)
select #T2.id2, #T1.value
from #T1
left join #T2 on #T1.value = #T2.value
left join #T3Info join #T3 on #T3.id3 = #T3Info.id3
 on #T3Info.id1 = #T1.id1
where #T3Info.id1 is null

Я не могу этого сделать, потому что # T1.id1 не вставляется в # T3.Не изменяя схему с # T1 по # T3, что я могу сделать, чтобы получить информацию, которую я хочу, в # T3Info?

Я хотел бы получить:

T3:

    id3  |  id2   |  value
---------+--------+---------
    300  |  NULL  |  a
    301  |   201  |  b
    302  |   200  |  c

T3Info:

   id1  |  id3
--------+--------
   100  |  300
   101  |  301
   102  |  302

1 Ответ

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

Я думаю, что это утверждение сработает!

merge into #T3
using(
select #T1.id1, #T1.value
,#T2.id2
,#T3Info.id3
from #T1
left join #T2 on #T1.value = #T2.value
left join #T3Info on #T3Info.id1 = #T1.id1) src
on src.id3 = #T3.id3
when not matched by target then
insert(id2, value) values(src.id2, src.value)
output src.id1, inserted.id3
into #T3Info;

Любые комментарии о надежности этого?

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