2016-12-03 100 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