как получить идентификатор последней строки, удаленной из таблицы SQL - PullRequest
3 голосов
/ 13 ноября 2009

Я пытаюсь получить последний Id, используя функцию max (Id), где Id - первичный ключ. Мой код работает хорошо, если я не удаляю последнюю строку из таблицы, потому что когда я удаляю последнюю строку, тогда этот Id все еще сохраняется, и в этом случае max (Id) будет извлекать Id последней строки, но не тот Id, который удаляется из таблицы.

Есть ли какая-либо функция, которая извлекает последнюю строку удаленного идентификатора. Я видел несколько постов, использующих функции scope_identity() и @@identity для получения текущего идентификатора. Я использовал эти функции, но они не работают. Я редактирую свой код внутри DLL-файла, возможно, это создает проблему.

Ответы [ 3 ]

4 голосов
/ 13 ноября 2009

Если вы используете SQL 2005 или выше, вы можете использовать предложение OUTPUT, чтобы получить идентификатор для удаленной строки.

Проверьте эту ссылку для хорошего примера

3 голосов
/ 13 ноября 2009

Вы можете создать событие 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 
1 голос
/ 16 ноября 2009

@@ Identity и Scope_Identity () возвращают только самое последнее значение идентификатора для текущего сеанса .

Чтобы получить самое высокое значение идентификатора, которое когда-либо было присвоено таблице (даже если некоторые из них были удалены), вы можете использовать Ident_Current

BOL описывает это следующим образом: IDENT_CURRENT возвращает последнее значение идентификатора, сгенерированное для конкретной таблицы в любом сеансе и любой области действия

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...