2013-11-02 3 views
0

테이블에 마지막 ID를 삽입하려고합니다. 내가 Sql Server - 마지막 ID를 테이블에 삽입하는 방법

SELECT IDENT_CURRENT('TABLE') 

을 사용하고 있었다 그러나 문제는 그것이 마지막으로 삽입 된 ID를 반환하지 않는다는 것입니다 , 그것은 최대 삽입 된 ID를 반환합니다. 예를 들어

, 내가 할 경우 :

INSERT INTO 'TABLA' (ID) VALUES (100) 

SELECT IDENT_CURRENT('TABLE') returns 100 

하지만를 다음 내가

INSERT INTO 'TABLA' (ID) VALUES (50) 

SELECT IDENT_CURRENT('TABLE') returns 100 

을하고 난 50

내가 특정 테이블의 ID를 필요로 받기를 원한다면, 그리고 ID를 다이나믹하게 생성하므로 ID가 아닙니다. 어떻게하면됩니까?

+1

'IDENT_CURRENT'는 자동으로 증가하는 열을 예상합니다.수동으로 ID를 삽입 할 수 있다면 자동 증가 숫자를 사용하지 않거나 자동 증가가 꺼져 있습니다 (SET IDENTITY_INSERT 사용). – SchmitzIT

+0

예, ID를 삽입하기 전에 ID를 생성 할 수 있어야하므로 IDENTITY_INSERT를 Off로 설정해야합니다. –

+3

- 항상 나쁜 생각입니다. 자동 생성 된 ID는 정확히 일치해야합니다. ID 번호를 수동으로 생성해야하는 경우 장기적으로 관리적인 문제가 발생할 수 있습니다. 어쨌든 IDENT_CURRENT를 사용하여 마지막으로 삽입 된 ID를 검색 할 수는 없습니다. 자동 신원을 무시하도록 요구하는 비즈니스 프로세스를 검토하는 것이 좋습니다. 그렇지 않으면 Phil Sandlers의 솔루션으로 이동하십시오. – SchmitzIT

답변

1
SELECT SCOPE_IDENTITY() 

은 현재 세션에 마지막으로 삽입 된 값을 반환합니다.
편집
그럼 무슨 일을하는 것은 바로 가서 ID 열이 IDENTITY 열, IDENT_CURRENT ('TABLE_NAME')가 있는지 확인하는 가장 좋은 방법은, @@ IDENTITY 및 SCOPE_IDENTITY는()에 의해 생성 된 마지막 값을 반환 ID 열입니다.
ID 열이 ID 열이 아닌 경우이 함수는 모두 NULL을 반환합니다.

+0

특정 테이블의 마지막 삽입 된 ID가 필요합니다. –

+0

@mar_sanbas 제 대답을 업데이트했습니다. 제발 좀 봐주세요. –

5

코드에서 ID가 ID (자동 증가) 열이 아닌 것처럼 보이므로 IDENT_CURRENT가 예상 한대로 처리하지 않습니다.

SELECT TOP 1 [ID] FROM TABLEA ORDER BY [InsertedDate] DESC 

편집 : 마지막 행이 삽입 찾으려면

, 같은 것을 당신은 삽입 시간을 나타내는 날짜 열이 필요합니다, 그리고 당신이 할 수있는 몇 가지 추가 참고 사항 :

    는 값
  • 내가 말한 이유를 설정하는 책임이 삽입을 수행하는 데 사용할 어떤에 GetDate() 응용 프로그램 않는 설정 기본 저장 발동을가집니다 또는 귀하의 InsertedDate 열은 ID가없는
  • ID/자동 증가는 값을 삽입하기 때문입니다. ID 삽입을 해제 한 경우에만 가능합니다.
+0

예, 인서트를 보내기 전에 ID를 생성해야하기 때문에 ID 인서트를 꺼야합니다. 좋은 생각이지만 제한이있어서 삽입 된 날짜를 저장할 수 없습니다. –

+1

테이블에 날짜 나 순서를 나타내는 것이 없으면 삽입 된 첫 번째 또는 마지막 행을 쉽고 간단하게 찾을 수 없습니다. –

+1

@mar_sanbas 클라이언트에서 값을 생성하는 경우 ID 열은 왜 그럴까요? 그리고 가치를 전달한다면 왜 그것을 찾아야합니까? 방금 통과했기 때문에 이미 알고 있지 않습니까? –

1

SQL Server는 SET IDENTITY_INSERT ON;를 사용 특히 때, IDENTITY 컬럼에 삽입 된 마지막 값을 추적하지 않습니다. 그러나 삽입하려는 값을 수동으로 지정하는 경우 SQL Server가 무엇인지 알려주지 않아도됩니다. INSERT 문에 명시 적으로 지정했기 때문에 이미 무엇인지 알 수 있습니다.

당신은 단지 삽입되는 값을 추적하는 코드를 얻을 수 없다, 당신이 볼 수 있도록 할 CURRENT_TIMESTAMP의 기본과 DateInserted 열을 (가지고 테이블을 변경할 수없는 경우 어떤 행이 마지막에 삽입되었는지), 모든 삽입을 기록하는 테이블에 트리거를 추가 할 수 있습니다.

관련 문제