2012-04-19 10 views
3

を選択することは、私のアプリケーションは、サーバー上のクライアントとデータベース上にある私は、クライアントからの新しい行を挿入するたびに、私は、だから、一つのテーブルを挿入し、私は、サーバーと多くのクライアントを持っている別のクエリでSQL

Table --> Id --> int Auto-increment, 
Name --> nvarchar(50), 

を持っていますクエリ

Insert into Table Name Values('NameValue') 

この行を挿入すると、sqlによってIdフィールドが自動的に生成されます。だから、そのIDを取得するために、私は次のクエリ

Select max(Id) as maxId from Table 

を使用しますが、両方のクエリが異なる接続

上にある1つのクライアントのみが一度に動作しているときが、複数のクライアントが作業しているとき、それはうまく動作し、私は 'getMaxId'クエリを要求する前に、多くの挿入クエリがクライアントによって要求されます。

+0

役立つことでしょう。この希望を試しますID – Likurg

+0

あなたの問題についてチャットしてもよいですか? – Likurg

答えて

1

むしろ使用:

select @@identity 

代わりのselect max(id)...

をそれは、現在の接続のための最後の生成のIDを返します。

+2

@@ identityを使用する場合は注意が必要です。スコープを越えているので、現在のステートメントではなくトリガから値を得ることができます - http://stackoverflow.com/a/42655/905651 – weenoid

+0

しかし、すべてのSQLクエリでは、私は新しい接続を作成します –

2

次を使用することができます。

SELECT SCOPE_IDENTITY() 

これが最後に挿入されたIDを選択します。

2

このお試しください:

DECLARE @a TABLE (
    Id int IDENTITY (1, 1), 
    b VARCHAR(1000) 
) 

DECLARE @b TABLE (
    Id INT 
) 

INSERT @a (b) 
OUTPUT INSERTED.Id INTO @b 
SELECT NAME 
FROM sys.objects 


SELECT * FROM @a 
SELECT * FROM @b 

それとも、あなたは常に最新のident取得するためのことを使用することができます。

SELECT IDENT_CURRENT('TABLE_NAME') 

それとも

SELECT SCOPE_IDENTITY() 
+0

更新を確認し、それはサイプラーかもしれないが、あなたの問題を解決する –

2

を使用する最善の方法を実行することですがコマンドを使用して、最近挿入された値を取得します。

実行するコマンドは3つあります。

Thisリンクが最善である彼らに

を説明します

SELECT SCOPE_IDENTITY() 

あなたがテーブルBにトリガし、このトリガー挿入データを呼び出してテーブルAを持っている場合、このコマンドはあなたになりますので、テーブルAのIDは、@@ IDENTITYはあなたにテーブルB

+0

@@ IDENTITYとSCOPE_IDENTITY()の違いを編集して調べる。これはとても重要です – Diego

0

のIDを取得する一方挿入する代わりにマックス(ID)を選択した後、以下を追加します。

SELECT SCOPE_IDENTITY() 
1

使用この、それはPHP

ます$ id =にmysql_insert_id()のために動作します。

とC#

のInt32 NEWID =(Int32)をmyCommand.ExecuteScalar()のために、

0

sqlでは、SELECT SCOPE_IDENTITY()によって行を追加し、IDを取得する関数を作成します。関数を呼び出すと、正確に追加されたIDを取得します。

0

すべての答えはイムネハカンナを間違えない場合は、最後のIDを取得する方法でそれを得ることができ、問題が正しく取得できませんなぜそれがあなた

declare @table1 table(id int identity,name varchar(50)) 
    insert into @table1 (name) output inserted.id values('abc') 
    insert into @table1 (name) output inserted.id values('xyz') 
    insert into @table1 (name) output inserted.id values('pqr') 

for more see here

関連する問題