2013-07-30 3 views
-4

@@ Identity를 이해할 수 없습니다. 이것이 정확히 무엇입니까? SQL Server @@ Identity

DECLARE @CustomerID int, 
    INSERT INTO Customers 
    (Name, Login, Password, IsActive,) 
    VALUES('University', NULL, NULL, 1,) 
    SET @CustomerID = @@IDENTITY 

하지만 삽입 후 다른 장소에서

, 그녀는 @@IDENTITY 포함되지 않은 : 나는 신원 사양은 '예'로 설정하고 신원 증가가 나는 데이터베이스 프로그래머에서 코드를 검토하고 1로 설정하고 난 다음 발견 자신이있는 테이블이 . 예를 들어 : 같은 코드에서 그녀는 있습니다

INSERT INTO Meters 
(Name, Type, SiteID, CustomerAccountID) 
SELECT Sites.Name + ' ' + Type, ID, ID, NULL 
FROM Sites 
CROSS JOIN MeterTypes 
WHERE ProjectID = @ProjectID 
AND tblMEP_MeterTypes.ID IN(1, 3, 13) 

는 아무도 때 @@IDENTITY를 사용하는 방법을 말해 줄래? 나는 그것이 모든 삽입 문장의 끝에 있어야한다고 생각했다. 그런데 위의 테이블 (Customers)에는 ID라는 열이 있으며 기본 키 필드이며 Null 일 수 없습니다! 어떻게 유효합니까? 그것은 다음과 같아야합니다 :

DECLARE @CustomerID int, 
    INSERT INTO Customers 
    (ID, Name, Login, Password, IsActive,) 
    VALUES(1, 'University', NULL, NULL, 1,) 
    SET @CustomerID = @@IDENTITY 
+0

그건 내 질문이 아닙니다! 나는 그것을 읽고 온라인으로 보았으나 나는 그걸로 아무데도 못 가고있다. –

+0

우리는 왜 그 장소를 사용하고 우리는 다른 장소에 있지 않습니까? 미안해, 이건 짜증나.하지만 내가 묻지 않는다는 걸 알면 맹세한다. –

+2

@@ IDENTITY에 대해 들어 보지 못한 척하십시오. 필요할 때 SCOPE_IDENTITY를 사용해야합니다. 그리고 당신은 거꾸로 IMHO를 배우고 있습니다. "우,이 함수 이름이 뭐니? 어딘가에 이걸 사용할 수 있을까요?" "확인해 봐야하는데, 테이블에서 생성 된 마지막 신원 값을 가져와야 할 상황이 있습니다. 어떤 함수를 사용해야합니까?" –

답변

2

아마도 두 번째 코드 블록에서 생성 된 IDENTITY 값을 신경 쓰지 않았기 때문일 수 있습니다. 아마도 첫 번째 코드 샘플에서는 클라이언트로 돌아가거나 나중에 관련 테이블에 삽입하는 데 사용되었습니다.

그리고 @@ IDENTITY에 대해 잊어 버려야합니다. SCOPE_IDENTITY()가 훨씬 안전하며 OUTPUT 절도 유용합니다.

관련 문제