多表插入错误的存储过程:无法将值空值插入列

时间:2010-05-06 05:29:36

标签: sql-server-2005 stored-procedures insert

晚安,

我创建了以下存储过程:

CREATE PROCEDURE AddQuote
-- Add the parameters for the stored procedure here

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @CompanyName nvarchar(50),
    @Addr nvarchar(50),
    @City nvarchar(50),
    @State nvarchar(2),
    @Zip nvarchar(5),
    @NeedDate datetime,
    @PartNumber float,
    @Qty int
-- Insert statements for procedure here
Insert into dbo.Customers
(CompanyName, Address, City, State, ZipCode)
Values (@CompanyName, @Addr, @City, @State, @Zip)

Insert into dbo.Orders 
(NeedbyDate)
Values(@NeedDate) 

Insert into dbo.OrderDetail
(fkPartNumber,Qty)
Values (@PartNumber,@Qty)


END
GO

当我执行AddQuote时,收到错误声明:

Msg 515, Level 16, State 2, Procedure AddQuote, Line 31
Cannot insert the value NULL into column 'ID', table 'Diel_inventory.dbo.OrderDetail'; column does not allow nulls. INSERT fails.
The statement has been terminated.

我知道我已将Qty字段设置为不允许空值并希望继续这样做。但是,我是否应该进行其他语法更改以确保此sproc正常工作?

谢谢, SID

2 个答案:

答案 0 :(得分:1)

在我看来,您忘记为OrderDetail表的ID列启用“身份规范”。它与您的存储过程本身无关。

您需要重新创建表以使ID列具有IDENTITY,但SQL Management Studio将为您编写脚本。

答案 1 :(得分:1)

  • OrderDetail表中有一个ID列
  • 您没有在INSERT中为ID提供值

所以

  • 更改OrderDetail插入以提供值
  • 或确保该列具有IDENTITY
  • 或确保它有默认值(如果它是PK,则无用,但通常可以选择)
相关问题