2017-04-20 1 views
0

私は(n-1)であるSQL Serverの で前々回アイデンティティを取得できる方法を知りたいです。私は@identity-1を得ることができます。私の問題は、以前のものがを削除されたときに全体の計算が間違っているだろう、です。これで助けてください。SQL Serverの最後のアイデンティティを取得する方法を教えてください。

+3

あなたは解決しようとしていますが、 "最後の1つのアイデンティティ"を得ることは解決策ではありません。対処しようとしている*より広範な*問題を概説できますか? –

+1

あなたのユースケースについては、カピルの答えはマッチだと思います –

答えて

1

あなたがテーブルの最大身元を取得したい場合は、あなたのコラムの最後のIDを取得したい場合、あなたはあなたがして

Select Max(IdentityColumn) from YourTable 

を使用する必要があります使用する必要があります

2

テーブルのID列のの次の最大値を見つけようとしているようです。そのためのクエリ:

Select max(identityColumnName) from [tablename] where identityColumnName  
not in (select max(identityColumnName) from [tablename]) 
1

ここで私はbeleiveダミアンが正しいとあなたがする別の方法ですID列の2番目の最後の値を取得することは、おそらく解決策ではありませんので、tterが、実際の問題をdescrib:

SELECT TOP 1 IdentityColumn 
FROM 
(
    SELECT TOP 2 IdentityColumn 
    FROM YourTable 
    ORDER BY IdentityColumn DESC 
) t 
ORDER BY IdentityColumn 
1

は、ちょうど最後の識別子の横を取得するには、あなたはまた、TOPとの組み合わせでLAGまたはLEADを使用することができます。これはIDが自動的に入力IDENTITYによってだINTであることを前提としていることを

注意。
IDは、それが最大値は、最後の作成したレコードを与えることを意味するものではありませんソートuniqueidentifier(別名GUID)です。例えば

:同一性を有するテーブルを用い

declare @T table (id int identity(1,1), value varchar(30)); 

insert into @T (value) values 
('A'),('B'),('C'),('D'),('E'); 

select top 1 
lag(id) over (order by id) as BeforeTheLastId 
from @T 
order by id desc; 

select top 1 
lead(id) over (order by id desc) as BeforeTheLastId 
from @T 
order by id desc; 

-- But to get the last Id, a max will do 
select max(id) as LastId from @T; 

ポストscriptum試験: テーブルの現在のIDは、SELECT IDENT_CURRENT('<YourTableName>')

として取得できる

IF OBJECT_ID('tempdb..#tmpTest') IS NOT NULL DROP TABLE #tmpTest; 
create table #tmpTest (id int identity(1,1) primary key, value varchar(30), createdOn datetime2 default SYSDATETIME()); 
insert into #tmpTest (value) values ('A'),('B'),('C'),('D'); 

declare @MaxIdBeforeInsert int; 
select @MaxIdBeforeInsert = max(id) from #tmpTest; 
insert into #tmpTest (value) values('E'); 

select * from #tmpTest; 

select 
IDENT_CURRENT('tempdb..#tmpTest') as CurrentIdentity, 
@@IDENTITY as IdentityVar, 
SCOPE_IDENTITY() as ScopeIdentity, 
@MaxIdBeforeInsert as MaxIdBeforeInsert; 
0

2番目の最大IDを使用するには、次のようにする必要があります。

SELECT ISNULL(IDENT_CURRENT('<YourTableName>'), 1)-1 
関連する問題