3

サーバーと多くのクライアントがあり、アプリケーションはクライアント上にあり、データベースはサーバー上にあります。テーブルは 1 つです。

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' クエリを要求する前にクライアントから多くの挿入クエリが要求されます。

4

8 に答える 8

2

以下を使用できます。

SELECT SCOPE_IDENTITY()

これにより、最後に挿入されたIDが選択されます。

于 2012-04-19T08:36:27.353 に答える
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

または、常に最新のIDを取得するために使用できます。

SELECT IDENT_CURRENT('TABLE_NAME')

または使用する

SELECT SCOPE_IDENTITY()
于 2012-04-19T08:36:51.130 に答える
2

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

これを行うために実行できるコマンドは3つあります。

このリンクはそれらを説明します

最高は

SELECT SCOPE_IDENTITY()

トリガーを呼び出すテーブルAがあり、このトリガーがテーブルBにデータを挿入する場合、このコマンドはテーブルAのIDを取得し、@@IDENTITYはテーブルBのIDを取得するためです。

于 2012-04-19T08:37:29.663 に答える
1

これを使用しますが、PHPで機能します

$id = mysql_insert_id();

そしてC#の場合

Int32 newId = (Int32) myCommand.ExecuteScalar();

于 2012-04-19T08:41:18.120 に答える
1

むしろ使用:

select @@identity

それ以外のselect max(id)...

現在の接続に対して最後に生成された ID を返します。

于 2012-04-19T08:36:16.867 に答える
0

Max(id)の選択の代わりに、挿入後に以下を追加します。

SELECT SCOPE_IDENTITY()
于 2012-04-19T08:38:31.240 に答える
0

この希望を試してみてください。

  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')

詳しくはこちら

于 2012-04-19T09:46:35.933 に答える
0

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

于 2012-04-19T08:42:16.353 に答える