无法通过存储过程插入到两个表中

时间:2014-02-27 08:51:30

标签: sql-server stored-procedures

我试图通过存储过程同时插入两个表,但它只写入一个表而另一个表失败。

ALTER PROCEDURE [dbo].[insert_emp_pics]
@EmpName nvarchar(100), 
@Nationality nvarchar(30), 
@PassportPic nvarchar(100), 
@Pic nvarchar(100)
AS
Begin
set nocount on;
DECLARE @ID int, 
@Emp_ID int
insert into Employee (EmpName,Nationality)
values (@EmpName,@Nationality)
select @ID = @@IDENTITY
insert into DatePics 
(PassportPic,Pic)
values
(@PassportPic ,@Pic)
select @Emp_ID  = @@IDENTITY
 end

两个表之间存在关系

第一个表格 [Employee] PK ID

第二个表格 [DatePics] FK Emp_ID

这是执行此语句后的错误消息。

Cannot insert the value NULL into column 'Emp_ID', table 'QTecTest.dbo.DatePics'; 
column does not allow nulls. INSERT fails.

2 个答案:

答案 0 :(得分:4)

您需要将新Emp_Id作为外键插入DatePics(假设两个表都有标识列):

insert into Employee (EmpName,Nationality)
values (@EmpName,@Nationality);
set @EMP_ID = SCOPE_IDENTITY();
insert into DatePics (PassportPic,Pic, Emp_ID)
values (@PassportPic ,@Pic, @EmpID);
set @DatePicsID  = SCOPE_IDENTITY();

另外,请SCOPE_IDENTITY使用@@IDENTITY - @@Identity容易受到触发器同时创建新(无关)身份的问题的影响。

答案 1 :(得分:1)

声明为主键的列不能具有NULL值。 在存储过程中,您没有向Emp_ID列提供值,因此插入失败。 如果您想在该列中自动插入值,请将其设为IDENTITY