2017-12-20 19 views
2

Ive가 계속 도움을 받았지만 아무 도움도받지 못했습니다. 마지막으로 ID SCOPE_IDENTITY()를 삽입하려는 저장 프로 시저가 있습니다. B 그러나 당신이 당신의 데이터베이스 테이블에 ID 열이있는 경우 테이블에 새 행을 추가 할 때, NULL 값을SQL 서버의 테이블에 삽입 할 값으로 Identity_Scope를 사용하는 방법

CREATE PROCEDURE dbo.Createletter 

@A INT, 
@B NVARCHAR(50), 
@C NVARCHAR(50), 


AS 

BEGIN; 
    SET NOCOUNT ON; 

    BEGIN; 

    INSERT INTO dbo.Employees (A, B, C) 
    VALUES      (@A, SCOPE_IDENTITY(),@C); 
    END; 

END; 
GO 
+0

는 "지난 정체성"이란 무엇 추측? 테이블에서 가장 높은 ID를 의미합니까? 어떤 경우이든 SCOPE_IDENTITY() (여기에있는대로 identity_scope()가 아님)는 명령문의 가장 최근 삽입에서 마지막 ID를 반환합니다. 이 앞에 삽입이 없으므로 범위에 ID가 없습니다. FacultyEmployeeID에 대한 삽입을 실행하는 다른 프로 시저가 있습니까? * this * insert 문에서 그 값을 반환해야 할 필요가있는 것 같습니다. 그리고 만약 다른 스코프라면 SCOPE_IDENTITY()를 사용할 수 없을 것입니다. 다른 스코프가 될 것입니다 ... 조금 더 명확하게해야 할 필요가 있다고 생각합니다. –

+0

필자는 내 프로 시저의 insert 문에서 Scope_Identity()를 시도했지만 여전히 NULL이됩니다. 또한 삽입 이전에 절차가 없습니다 – Derek

+1

그러면 정확한 문제입니다. 앞의 주석에서 말한 것처럼 SCOPE_IDENTITY()는 스코프에서 가장 최근의 ID 값을 반환합니다. 이 범위에는 다른 삽입이 없기 때문에 반환 할 Identity 값이 없습니다. 따라서'NULL'. –

답변

0

를 반환 유지, ID 값이 자동으로 생성됩니다. 다음과 같이 마지막 Insert 문에 대해 생성 된 값을 가져올 수 있습니다. 이 절차는 테이블의 레코드를 작성하는 경우

create table dbo.Employees (
    A int identity(1,1), 
    B nvarchar(50), 
    C nvarchar(50) 
) 

declare @B nvarchar(50), @C nvarchar(50) 
INSERT INTO dbo.Employees (B, C) VALUES (@B, @C); 

select SCOPE_IDENTITY() 

, 해당 행에 대한 IDENTITY를 얻으려고 노력 될 수있다, 나는