将主键标识(id)作为外键插入到其他表中

时间:2014-03-26 13:51:50

标签: sql-server

我在SQL中有两个表(InjuryScenario和ProductTypeDet)

CREATE TABLE InjuryScenario
(

InjuryScenario_id int identity(1,1),
InjuryScenario_name varchar(80),
InjuryDay int,
InjuryMonth int,
InjuryYear int,
InjuryDesc varchar(80),
InjuryComments varchar(50),
AlmostInjury int,
InjuryInSchool varchar(20),
ProductInjury varchar(20),
Cause_id int,
CauseType_id int,
CauseChar_id int,
Place_id int,
PlaceType_id int,
Username varchar(50),
InjuryDate_id int,
constraint pk_InjuryScenario_id primary key (InjuryScenario_id),
constraint fk_Cause_InjuryScenario foreign key(Cause_id) references Cause(Cause_id) on delete cascade,
constraint fk_CauseType_InjuryScenario foreign key(CauseType_id) references CauseType(CauseType_id) on delete no action,
constraint fk_Place_InjuryScenario foreign key(Place_id) references Place(Place_id) on delete cascade,
constraint fk_PlaceType_InjuryScenario foreign key(PlaceType_id) references PlaceType(PlaceType_id) on delete no action,
constraint fk_Users_InjuryScenario foreign key(Username) references Users(Username) on delete cascade,
constraint fk_InjuryDate_InjuryScenario foreign key(InjuryDate_id) references InjuryDate(InjuryDate_id) on delete cascade, 
)


CREATE TABLE ProductTypeDet
(
ProductCategory_id int,
ProductType_id int,
Product_name varchar(80),
Brand_name varchar(80),
Notes varchar(80),
Manufacturer_name varchar(80),
Launch_Date date,
ProdTypeDesc varchar(80), 
ProductInjury varchar(20),
Status_id int,
SafetyAct_id int,
InjuryScenario_id int foreign key references InjuryScenario(InjuryScenario_id),
constraint fk_ProductCategory_ProductTypeDet foreign key(ProductCategory_id) references ProductCategory(ProductCategory_id) on delete cascade,
constraint fk_ProductType_ProductTypeDet foreign key(ProductType_id) references ProductType(ProductType_id) on delete no action,
constraint fk_ProductStatus_ProductTypeDet foreign key(Status_id) references ProductStatus(Status_id) on delete cascade,
constraint fk_SafetyAct_ProductTypeDet foreign key(SafetyAct_id) references Product(SafetyAct_id) on delete no action
)
VS中的

我有Insert函数,用于将数据从用户插入到表中。

我构建了SQL触发器 -

CREATE TRIGGER tr_InjuryScenario_ForInsert
ON InjuryScenario
FOR INSERT
AS
BEGIN

DECLARE @Id int
SELECT @Id = InjuryScenario_id from inserted

INSERT INTO ProductTypeDet(InjuryScenario_id)
values(@Id) 

END

我有一个问题,就是在ProductTypeDet表中创建了两行 - 一个来自触发器(只有InjuryScenario_id而其他颜色为null)而另一个来自vs中的Insert函数(coloumns从用户选择中填充并且InjuryScenario_id为空)。 我如何将这两行连接成一个?

1 个答案:

答案 0 :(得分:0)

你永远不会写那样的触发器!插入和删除的表可能包含多行,您尝试将值设置为标量变量。 (顺便说一句,你应该使用多个记录插入/更新或删除单元测试触发器)使用基于集合的propcess。

INSERT INTO ProductTypeDet(InjuryScenario_id)
SELECT  InjuryScenario_id from inserted