2015-01-15 4 views
-1

내가 삽입하는 객체에 null 값이 없을 때이 예외가 발생할 수있는 원인은 무엇입니까? 개체를 디버깅하고 보았습니다. null 값은 없지만 여전히 예외가 발생합니다. 내가 생각할 수있는 유일한 방법은 컬럼에 대한 정의가 이전 SQL 예외 - 열에서 null을 허용하지 않습니다. INSERT가 실패합니다. 내 데이터가 null이 아님에도 불구하고

identity(1,1) not null 

을 읽었고 내가 그것을 단지

not null 

어떤 아이디어를 변경한다는 것이다?

내 테이블

CREATE TABLE [dbo].[Products] (
    [ProductId]  INT    NOT NULL, 
    [Enabled]   BIT    CONSTRAINT [DF_Stock_Enabled] DEFAULT ((1)) NOT NULL, 
    [Sort]    INT    NOT NULL, 
    [ProductPrice] DECIMAL (18, 2) NOT NULL, 
    CONSTRAINT [PK_Stock] PRIMARY KEY CLUSTERED ([ProductId] ASC), 
    CONSTRAINT [FK_Stock_Products] FOREIGN KEY ([ProductId]) REFERENCES [dbo].[Products]  ([ProductId]) 
); 
+0

테이블의 스키마는 무엇이며 'INSERT' 문은 무엇이 실행되고 있습니까? 'identity' 컬럼을 더 이상 'identity'가 아닌 것으로 변경했다면, 그 컬럼에 값을 제공하고 있습니까? – David

+0

프로파일 러를 사용하여 실패한 쿼리를 찾습니다. 또는 앱에서 SQL 로깅을 사용하도록 설정할 수 있습니다. – Andrey

+0

네, 의심 할 여지없이 열 값을 제공하고 있습니다. 나는 그 오류가 테이블이 원래 ID (1,1)로 만들어졌다가 그 테이블이 제거되었다는 사실과 관련이 있다고 생각한다. – user1977591

답변

0

예, IDENTITY는 삽입에 해당 열의 증가 된 값을 생성하는 것을 의미합니다. 제거하면 해당 테이블에 대한 모든 삽입이 더 이상 자동으로 해당 순번을 생성하지 않으므로 실패합니다.

+0

INSERT에 해당 열의 값이 포함되어 있지 않으면. OP가 실패한 코드에 대한 실제 정보를 공유하지 않았기 때문에 우리는 알 수 없습니다. 나는 이것이 문제 일 가능성이 높지만 동의한다. – David

+0

'SET IDENTITY_INSERT [table_name] ON' 인 경우에만. 그것은 이미 켜져 있지 않다면 이미 열에 삽입 할 수 없었을 것입니다. OFF로 설정하면 삽입이 실패합니다. – gmiley

+0

열이 더 이상 ID가 아닌 경우 값을 삽입 할 필요가 없습니다. 값이 제공된 경우 값이 제공되지 않습니다. 그러나 열이 ID가 아니며 널 (null)을 허용하지 않으면 값이 제공되지 않으면 관측 된 오류 *가 발생합니다. – David

0

ID가 (1,1)이 아닌 경우 해당 열에 값을 제공 할 필요가 없다는 의미입니다. SQL Server는 자체에 대한 값을 증가시킵니다 (해당 테이블에서 IDENTITY_INSERT가 해제 된 경우).

null이 아닌 것으로 변경하면 해당 열의 값을 제공해야합니다. SQL Server 프로필러에서 생성 된 문을 체크 인하십시오.