Msg 515, Level 16, State 2, Procedure CreateParty, Line 16 Cannot insert the value NULL into column 'Id', table 'DEVIN.dbo.Party';
列不允许空值。插入 失败。 声明已经终止。
(1 row(s) affected)
到底是什么?我的表由
组成Id (Primary Key)
FirstName
LastName
这是我的存储过程:
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
有人能找出为什么我会得到那个错误吗?这太烦人了......
此外,由于某种原因,SQL Management仅显示intellisense中的“Id”列。我不知道为什么......
截图:
它是否还没有“PK_Party”身份?它会自动执行此操作..我必须遗漏某些内容......
答案 0 :(得分:8)
INSERT INTO Party (FirstName, LastName)
Values (@firstname,@lastname)
您没有为列Id
指定值,因此INSERT将尝试插入默认值:
IDENTITY()
列,默认值为下一个标识DEFAULT
约束的列,默认值将是约束的值NULL
发布表格的 Exact 定义,以便我们告诉您列的默认值是什么。
答案 1 :(得分:4)
ID是身份还是主键? PK本身不会填充插入列的任何数据。
答案 2 :(得分:0)
使用指定的标识删除并重新创建表。如果你已经有数据,那就更复杂了。
用于创建具有标识的表的scritp示例:
USE [MyDatabase]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type in (N'U'))
DROP TABLE MyTable
GO
CREATE TABLE MyTable(
[ID] [int] IDENTITY (1,1) NOT NULL,
[LASTNAME] [varchar](500) NULL,
[FIRSTNAME] [varchar](500) NULL
) ON [PRIMARY]
GO
答案 3 :(得分:0)
为此,您必须创建相同的主键值I.e.自动递增。 主键是升序集群索引,它不能为空。 您必须创建1或任何值的身份增量。
至于现在你必须再次创建表,并且通过设计你必须增加值。
答案 4 :(得分:-2)
尝试使用代码
INSERT INTO Party
Values (@firstname,@lastname)
而不是INSERT INTO Party (FirstName, LastName)
Values (@firstname,@lastname)