2010-11-20 5 views
0
Msg 515, Level 16, State 2, Procedure CreateParty, Line 16 
Cannot insert the value NULL into column 'Id', table 'DEVIN.dbo.Party'; 

열에는 null이 허용되지 않습니다. INSERT 이 실패합니다. 명세서가 종료되었습니다.SQL Server : 저장 프로 시저가 NULL을 삽입하려고합니까?

(1 row(s) affected) 

도대체 무엇입니까?

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) 
    [email protected] varchar(100), 
    [email protected] char(5) 
AS 
BEGIN 

    SET NOCOUNT ON; 

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

END 

사람이 왜 도대체 내가 그 오류가 될 것이다 찾을 수 있습니다 : 내 테이블 내 저장 프로 시저가있어 여기에

Id (Primary Key) 
FirstName 
LastName 

구성? 너무 성가시다 ...


또한 SQL 관리는 intellisense의 "Id"열만 표시합니다. 나는 왜 아무 생각이 ... 없다

스크린 샷 : alt text

가 이미 신원 "PK_Party을"없음? 이것은 자동으로 수행합니다 .. 나는 뭔가를 놓치고 있어야합니다 ...

+1

ID는 IDENTITY 열입니까? PK만으로는 값이 삽입되지 않습니다 –

+1

'Id' 컬럼이'Identity'입니까? 이 오류는 그렇지 않을 수도 있음을 나타냅니다. 이는 여러분이 명시 적으로 그 값을 여러분의'insert 문에 나머지 열들과 함께 삽입 할 필요가 있음을 나타내는 이유 일 수 있습니다. – InSane

+3

'PARTY' 테이블에 대한 CREATE TABLE 문을 게시하십시오. –

답변

4

신분증은 기본 키뿐만 아니라 ID입니까? PK 자체는 삽입시 컬럼의 데이터를 채우지 않습니다.

-2

시도 따라서 INSERT가 기본 값을 삽입하려고 시도합니다, 당신은 더 열 Id에 대한 값을 지정합니까 코드를

INSERT INTO Party 
Values (@firstname,@lastname) 

대신

+2

아니요! ................... –

+0

나는 그게 간단하다고 생각했는데, 분명히 SQL로 테이블을 만들 때, 그렇지 않았다. 기본 키를 설정하는 것만 큼 간단합니다 ... – dcolumbus

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

INSERT INTO Party (FirstName, LastName) Values (@firstname,@lastname) 를 사용하지합니다 :

  • IDENTITY() 열, 기본 값이 DEFAULT 제약 조건을 가진 열에 대한 다음의 정체성
  • 될 것입니다, 기본 값은 다른
  • 모든 것이 정확한 NULL

포스트 될 것입니다 제약의 값이됩니다 테이블 정의를 통해 열 기본값이 무엇인지 알려줄 수 있습니다.

0

지정된 ID로 테이블을 삭제하고 다시 작성하십시오. 이미 데이터가 있다면 그보다 더 복잡합니다. 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 
0

당신이 기본 키 값을 생성 할 필요가 동일 즉, 자동 증가. 기본 키가 클러스터 인덱스에 영향을 미치며 null 일 수 없습니다. ID 증분은 1 또는 임의의 값으로 생성해야합니다.

이제 테이블을 다시 만들고 디자인을 통해 값을 증가시켜야합니다.

관련 문제