복붙노트

[SQL] SCOPE_IDENTITY (), 신원 (의 차이점은 무엇입니까), @@ IDENTITY 및 IDENT_CURRENT ()?

SQL

SCOPE_IDENTITY (), 신원 (의 차이점은 무엇입니까), @@ IDENTITY 및 IDENT_CURRENT ()?

내가 아는 SCOPE_IDENTITY (), 신원 (), @@ IDENTITY 및 IDENT_CURRENT () 모든 식별 컬럼의 값을 얻을,하지만 난 차이를 알고 싶어요.

나는 위의 이러한 기능에 적용되는 그들이 범위에 무엇을 의미합니까 갖는있어 논쟁의 일부?

나는 또한 그들을 사용하는 다른 시나리오의 간단한 예제를 사랑?

해결법

  1. ==============================

    1.세션은 데이터베이스 연결입니다. 범위는 현재 쿼리 또는 현재 저장 프로 시저입니다.

    세션은 데이터베이스 연결입니다. 범위는 현재 쿼리 또는 현재 저장 프로 시저입니다.

    당신이 테이블에 트리거가있는 경우 SCOPE_IDENTITY ()와 @@ 식별 기능이 다른 상황이다. 당신이 삽입 레코드가 다른 레코드 곳을 삽입하는 트리거를 유발하는 쿼리가있는 경우 @@ IDENTITY 기능이 트리거에 의해 생성 된 ID를 반환하면서, 쿼리에 의해 생성 된 ID를 반환합니다 SCOPE_IDENTITY () 함수.

    따라서, 일반적으로 당신은 SCOPE_IDENTITY () 함수를 사용합니다.

  2. ==============================

    2.좋은 질문.

    좋은 질문.

    더 참고, 참조 : http://msdn.microsoft.com/en-us/library/ms187342.aspx을.

    요약하면 : 당신이 행을 삽입하고, 당신은 당신이 방금 삽입 한 행의 ID 열 값을 알고 싶다면, 항상 SCOPE_IDENTITY ()를 사용합니다.

  3. ==============================

    3.당신이 범위와 세션의 차이를 이해한다면 이러한 방법을 이해하기 쉬울 것이다.

    당신이 범위와 세션의 차이를 이해한다면 이러한 방법을 이해하기 쉬울 것이다.

    아담 앤더슨 아주 좋은 블로그 게시물이 차이를 설명합니다 :

    따라서 다음과 같은 세 가지 아이디 검색 방식의 차이점은 :

  4. ==============================

    4.범위 수단 코드 문맥이 수행 INSERT 명령문 SCOPE_IDENTITY (), @@ IDENTITY의 전역에 반대.

    범위 수단 코드 문맥이 수행 INSERT 명령문 SCOPE_IDENTITY (), @@ IDENTITY의 전역에 반대.

    CREATE TABLE Foo(
      ID INT IDENTITY(1,1),
      Dummy VARCHAR(100)
    )
    
    CREATE TABLE FooLog(
      ID INT IDENTITY(2,2),
      LogText VARCHAR(100)
    )
    go
    CREATE TRIGGER InsertFoo ON Foo AFTER INSERT AS
    BEGIN
      INSERT INTO FooLog (LogText) VALUES ('inserted Foo')
      INSERT INTO FooLog (LogText) SELECT Dummy FROM inserted
    END
    
    INSERT INTO Foo (Dummy) VALUES ('x')
    SELECT SCOPE_IDENTITY(), @@IDENTITY 
    

    다른 결과를 제공합니다.

  5. ==============================

    5.때문에 @ 데이비드 프레이 타스에 의해 때문에 2012 년에 도입 된 새로운 시퀀스 기능과 호환성의 기재 버그 나는이 모든 세에서 멀리 체재 추천 할 것입니다. 대신 삽입 된 ID 값을 얻기 위해 OUTPUT 절을 사용할 수 있습니다. 또 다른 장점은 더 한 행보다 삽입 한 경우 출력도 작동합니다.

    때문에 @ 데이비드 프레이 타스에 의해 때문에 2012 년에 도입 된 새로운 시퀀스 기능과 호환성의 기재 버그 나는이 모든 세에서 멀리 체재 추천 할 것입니다. 대신 삽입 된 ID 값을 얻기 위해 OUTPUT 절을 사용할 수 있습니다. 또 다른 장점은 더 한 행보다 삽입 한 경우 출력도 작동합니다.

    자세한 내용과 예제는 여기를 참조하십시오 : 정체성 위기

  6. ==============================

    6.@@ 정체성의 문제를 명확히하기 위해 :

    @@ 정체성의 문제를 명확히하기 위해 :

    테이블을 삽입하고 테이블 삽입을하는 트리거가있는 경우 SCOPE_IDENTITY ()가 원래의 삽입에서 ID를 반환하면서 예를 들어, @@ IDENTITY는 트리거 (A log_id 또는 무언가)에 삽입에서 ID를 반환합니다 표.

    당신이 어떤 트리거가있는, SCOPE_IDENTITY ()와 @@하지 않도록 경우 ID는 같은 값을 반환합니다. 당신이 트리거가있는 경우, 당신은 당신이 원하는 어떤 값을 생각해야합니다.

  7. ==============================

    7.범위 정체성 : 신원 저장 프로 시저 내에서 추가 된 마지막 레코드의 실행된다.

    범위 정체성 : 신원 저장 프로 시저 내에서 추가 된 마지막 레코드의 실행된다.

    @@ IDENTITY : 쿼리 일괄 처리 내에서 추가 된 마지막 레코드의 정체성, 또는 쿼리 예를 들어,의 결과로 절차를 수행하는 인서트는 그 다음 트리거에서 삽입 된 레코드의 ID를 반환하는 기록을 삽입하는 트리거를 발생합니다.

    IdentCurrent : 테이블에 할당 된 마지막 ID.

  8. ==============================

    8.다음은이 책에서 또 다른 좋은 설명은 다음과 같습니다

    다음은이 책에서 또 다른 좋은 설명은 다음과 같습니다

  9. from https://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide by cc-by-sa and MIT license