我试图通过存储过程同时插入两个表,但它只写入一个表而另一个表失败。
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.
答案 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
列