2016-12-03 56 views
-1

我有如下表:删除标识值

CREATE TABLE MyTable 
(
    ID INT NOT NULL identity(1,1), 
    Name NVARCHAR(50) NOT NULL 
); 

我需要从MyTable两个记录删除:第一个与在MyTable和第二之一,在过去的标识值最后一个标识值当前会话。

澄清:则必须使用IDENT_CURRENT('MyTable')SCOPE_IDENTITY()也许@@IDENTITY来完成。

请帮助你的建议。

+1

似乎是功课。你试过了什么?为什么? –

+0

我试过多次查询 铁: {与CTE为 (从MyTable的 选择ID其中,ID = IDENT_CURRENT(“MYTABLE”)) 从CTE删除} ,但我不明白如何在当前会话中删除最后一个值在删除id = ident_current('Mytable')后,因为@@ identity和scope_identity返回值= ident_current('Mytable') –

+0

SCOPE_IDENTITY()和@@ IDENTITY可以为MyTable或其他表提供值。 ('@@ IDENTITY'在涉及触发器的地方尤其有趣。)如果最后一个INSERT被回滚或行被删除,'IDENT_CURRENT()'不会给你想要的值。你真的只是想删除两个最近添加的行(假设标识列没有被重新设置)吗? – HABO

回答

0

你必须使用@@IDENTITY获得在当前会话中使用的最后一个标识和 IDENT_CURRENT('MyTable')获得此表中的最后一个标识

DELETE FROM MyTable 
WHERE ID IN (SELECT IDENT_CURRENT('MyTable')) 
OR ID = @@IDENTITY 

阅读本Article更多信息

EDIT1

如果你想删除表中找到的最后一个标识值,你可以使用MAX()聚合函数

DELETE FROM MyTable 
WHERE ID = (SELECT MAX(ID) FROM MyTable WHERE ID <= @@IDENTITY) 

注:IDENT_CURRENT('MyTable')SCOPE_IDENTITY()@@IDENTITY不依赖于存储在表中的值

+0

我需要删除两条记录。该查询只删除了1条记录。删除后如何删除最后一个身份值?如果在删除前的ident_current = 19117,删除后相同(19117) –

+0

为什么不使用'MAX(ID)'? IDENT_CURRENT存储身份的最后一个值,即使它已被删除 – Hadi

+0

'IDENT_CURRENT('MyTable')','SCOPE_IDENTITY()'AND'@@ IDENTITY'不依赖于表中存储的值 – Hadi