2009-11-13 5 views
3

Id가 기본 키인 max (Id) 함수를 사용하여 마지막 ID를 얻으려고합니다. 마지막 행을 삭제할 때 그 ID가 여전히 보존되고이 경우 max (Id)가 마지막 행 ID를 검색하지만 테이블에서 삭제 된 ID가 없기 때문에 테이블에서 마지막 행을 삭제하지 않으면 코드가 잘 작동합니다.SQL 테이블에서 마지막 행의 ID를 삭제하는 방법

삭제 된 마지막 행을 검색하는 함수가 있습니까? Id. 일부 게시물은 scope_identity()@@identity을 사용하여 현재 ID를 가져 오는 것을 보았습니다. 나는이 기능을 사용했지만 작동하지 않습니다. 나는 dll 파일 안에 내 코드를 편집하고 있는데 문제가 생길 수 있습니다.

+0

당신은 .dat 파일과 함께 많은 작업을하고있는 것으로 보인다. –

+1

당신은 * 정말로 *하려고합니까? 솔루션을 제시하고로드 블록으로 뛰어 들고 있습니다. 솔루션을 이끌어 내려고 노력하고있는 것으로 의심됩니다. 우리가 필요로하는 것을 한 걸음 뒤로 물어 보면 대체 접근법을 모두 제시 할 수 있습니다. 가장 높은 ID *를 사용하려고하십니까? 물론 나는 어떤 약속도 할 수 없다;). –

+2

행을 삭제하는 방법을 다시 고려해 볼 수 있습니다. 가능한 한 기본 키로 삭제하는 것이 가장 좋습니다. 따라서 삭제하기 전에 실제로 ID가 있어야합니다. –

답변

2

TRIGGER FOR DELETE 이벤트를 생성하고 로그 테이블에 삭제 된 레코드를 삽입 할 수 있습니다.

CREATE TABLE LogDeletetable 
(
    ID   int   IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
    [datedelete] smalldatetime NOT NULL DEFAULT Getdate(), 
    ExtID int 
) 

CREATE TRIGGER TriggerONDELETE 
ON MyTable 
FOR DELETE 
AS 
DECLARE @ID int  
SET @ID = (SELECT ID FROM deleted)  
INSERT Logtable (ExtID) VALUES(@ID) 
GO 

그런 다음 삭제 된 레코드에 대해 myLogtable 테이블을 쿼리 할 수 ​​있습니다.

Select * FROM Logtable 
+0

그리고 데이터베이스가 트리거를 지원하면 저장 프로 시저를 지원할 가능성이 높습니다. 따라서 저장 프로 시저를 사용하여 삭제를 수행하면 삭제 된 ID가 반환됩니다. (또는 소니 보이 (Sonny Boy)가 말했듯이, 먼저 삭제를 위해 ID를 사용하십시오) – Joe

1

@@ IDENTITY 및 SCOPE_IDENTITY()는 단지 현재 세션에 대한 가장 최근의 ID 값을 반환합니다. IDENT_CURRENT 마지막 정체성을 반환

이제까지 다음과 같이

BOL이 그것을 설명 IDENT_CURRENT을 사용할 수 있습니다 (그들 중 일부가 삭제 된 경우에도) 테이블에 할당 된 최고 ID 값을 얻으려면 어떤 세션에서 특정 테이블 및 범위에 대한 생성 된 값은

http://msdn.microsoft.com/en-us/library/ms175098.aspx

관련 문제