SQL Server:存储过程尝试插入NULL?

dco*_*bus 0 sql t-sql sql-server stored-procedures sql-server-2008

Msg 515, Level 16, State 2, Procedure CreateParty, Line 16
Cannot insert the value NULL into column 'Id', table 'DEVIN.dbo.Party';
Run Code Online (Sandbox Code Playgroud)

列不允许空值.INSERT失败.该语句已终止.

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

我勒个去?我的桌子由

Id (Primary Key)
FirstName
LastName
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程:

USE [DEVIN]
GO
/****** Object:  StoredProcedure [dbo].[CreateParty]    Script Date: 11/19/2010 16:59:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      
-- Create date: 
-- Description: 
-- =============================================
ALTER PROCEDURE [dbo].[CreateParty]
    @firstname varchar(50),
    @lastname varchar(50)
    --@emailaddress varchar(100),
    --@zipcode char(5)
AS
BEGIN

    SET NOCOUNT ON;

    INSERT INTO Party (FirstName, LastName)
    Values (@firstname,@lastname)

END
Run Code Online (Sandbox Code Playgroud)

有人能找出为什么我会得到那个错误吗?这太烦人了......


此外,由于某种原因,SQL Management仅显示intellisense中的"Id"列.我不知道为什么...

截图: 替代文字

它还没有"PK_Party"的身份吗?它会自动执行此操作..我必须遗漏一些东西......

Rem*_*anu 8

INSERT INTO Party (FirstName, LastName)
    Values (@firstname,@lastname)
Run Code Online (Sandbox Code Playgroud)

您没有为列指定值Id,因此INSERT将尝试插入默认值:

  • 对于IDENTITY()列,默认值将是下一个标识
  • 对于具有DEFAULT约束的列,默认值将是约束的值
  • 其他一切都将是 NULL

发布表格的精确定义,以便我们告诉您列的默认值是什么.