2つのテーブルを照会して、他のテーブルの両方にリンクする3番目のテーブルのレコードを生成し、3番目のテーブル第3のテーブルにすでにレコードが生成されている場合は、再生成を防ぐために使用できる4番目のテーブルに追加します。以下は私がしようとしているものの単純化された例です。オプションのリンクを持つリンクレコードの生成IDを別のテーブルに挿入する
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
OUTPUTは、トリガーを作成することなく、データが挿入された挿入を同時にログまたは監査するのを少し容易にするために開発されたようです。私は明示的にそういうものは見つけられません(ここで説明されているが十分でない限り:http://msdn.microsoft.com/en-us/library/ms177564.aspx)しかし、私は#T1を推測するつもりですOUTPUTの範囲外です。たぶんT3でトリガーが必要なのかもしれません。 –
user662852
列を指定するためのオプションの1つはfrom_table_nameで、delete文またはupdate文のfrom句と一緒に使用されることになっています。それは彼らがその機能についての挿入ステートメントを省いたことはちょっと残念です。 – BlueMonkMN