これは私が今学んだベストプラクティスに従うことを保証することはできませんが、時々私の必要性が浮かび上がり、私はこれを学びたいと思っています。私はトリガーの代わりにあなたの質問に答えると思います。
create table Country (
id int primary key not null identity(1,1)
,name varchar(10)
)
go
create table Item (
id int primary key not null identity(1,1)
,country_id int references Country(id)
,data varchar(100)
)
go
create view ItemView as
select C.name, I.data
from Item I inner join Country C on I.country_id = C.id
go
create trigger tr_Item_IOI on ItemView
instead of insert as begin
set nocount on
-- add the country if it does not exist
if(not exists (select C.id from Country C inner join inserted I on C.name = I.name))
insert into Country select distinct name from inserted
-- insert an item using the country id for the inserted country name
insert into Item (country_id, data)
select C.id, I.data
from Country C inner join inserted I on C.name = I.name
end
go
insert into ItemView values
('USA', '123')
,('Canada', '4545')
,('Mexico', '4363')
,('USA', '3434')
go
select * from ItemView
select * from Country
select * from Item
私は実際にこれをやったことがないので、私は答えとして、それを主張するが、INSERTトリガーの代わりにチェックアウトするつもりはない - 私はあなたが上にあなたのビューを作成することができると思いますあなたのプログラムを挿入して、トリガーが実際のテーブルに外部キーを置くようにすることができます... http://msdn.microsoft.com/en-us/library/ms175521(v=sql.105).aspx –