이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11405|회답: 0

[팁] SQL은 INSERT를 기다린 후 기본 키 값을 받습니다

[링크 복사]
게시됨 2015. 5. 5. 오후 5:35:51 | | |

SQL SERVER 2000에서의 식별 값 가져오기 함수     
  SQL Server 2000에서는 아이덴티티 컬럼이 IDENTITY로 정의되며, 다음은 마지막으로 삽입된 레코드의 아이덴티티 값을 얻는 것과 관련이 있습니다   
   
  오프의 함수 예시     
   
          SQL Server에서는 SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT()를 사용해 마지막으로 삽입된 레코드의 값을 얻을 수 있으며, 이 두 레코드의 차이는 다음과 같습니다:   
  SCOPE_IDENTITY()는 동일한 범위 내 IDENTITY 열에 삽입된 마지막 IDENTITY 값을 반환합니다. 스코프는 모듈입니다 - 저장 프로시저, 트리거, 함수   
   
  숫자나 배치. 따라서 두 문장이 동일한 저장 프로시저, 함수 또는 배치에 속해 있다면, 동일한 범위에 속합니다.   
  @@IDENTITY 현재 세션의 모든 테이블에서 생성된 마지막 식별 값을 반환합니다.   
  IDENT_CURRENT()는 지정된 테이블에 대해 세션과 범위에서 생성된 마지막 식별 값을 반환합니다   
  그들의 차이를 설명할 예를 들어     
   
  -- a) 샘플 코드     
  --   ===========================================   
  -- 테스트 테이블 생성   
  --   ===========================================   
  TEMPDB 사용   
  가세요   
   
  CREATE table t1(id int IDENTITY,col int)   
  T1 삽입 선택 1   
  유니언 올 셀렉트 2   
  CREATE table t2(id int IDENTITY,col int)   
  가세요   
   
  T2에 트리거 TR_insert_t2 생성   
  삽입 자료   
  AS   
          삽입 t1 선택 3   
  가세요     
   
  --   ===========================================   
  -- 세 가지 함수 테스트: 1   
  --   ===========================================   
  t2 값 삽입(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')   
   
  /*--결과   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (영향을 받는 행 수는 1행입니다)   
  --*/   
  가세요   
   
  --   ===========================================   
  -- 세 가지 함수 테스트: 2   
  --   ===========================================   
  t1 값 삽입(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')   
   
  /*--결과   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (영향을 받는 행 수는 1행입니다)   
  --*/   
  가세요   
   
  --   ===========================================   
  -- 세 가지 함수 테스트: 3   
  -- ** 새 연결을 열고 다음 코드를 실행하세요 **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1에 대해] = IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2에 대해] = IDENT_CURRENT(N't2')   
   
  /*--결과   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL 너무 4 & n     
   
  --===========================================   
  -- 테스트 환경을 삭제합니다   
  --   ===========================================   
  테이블 T1, T2 드롭     
   
  -- b) 코드 결과 설명     
  위 코드에서 보시다시피:   
  IDENT_CURRENT()는 항상 지정된 테이블에 마지막으로 삽입된 값을 반환합니다   
  @@IDENTITY 동일한 범위 내에 있든 없든 현재 세션의 식별 값을 반환합니다. 테스트 1과 2에서는 트리거에 삽입된 레코드의 식별 값을 반환하는 것을 알 수 있고,   
   
  테스트 3에서는 현재 세션에 삽입 레코드가 없으므로 NULL이 반환됩니다   
  SCOPE_IDENTITY()는 현재 세션의 동일한 범위의 식별 값을 반환하므로, 테스트 1, 2에서는 트리거에 영향을 받지 않는 값을 반환하고, 테스트 3에서는 현재 세션이 보간되지 않기 때문에 반환됩니다   
   
  레코드를 반환하므로 NULL이 반환됩니다





이전의:왜 모두가 메이데이 휴일에 갔을까요?
다음:t-sql에서 SCOPE_IDENTITY()가 이전에 작성된 것과 후에 작성된 것의 차이는 무엇인가요?
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com