3

我有一个服务器和许多客户端,我的应用程序在客户端和服务器上的数据库,我有一个表

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

因此,每当我使用查询从客户端插入新行时

Insert into Table Name Values('NameValue')

它插入行并且 sql 自动生成 Id 字段。因此,要获取其 ID,我使用以下查询

Select max(Id) as maxId from Table

但两个查询都在不同的连接上

当一次只有一个客户端运行时,它运行良好,但是当多个客户端运行时,客户端请求了许多插入查询,然后我才能请求“getMaxId”查询。

4

8 回答 8

2

您可以使用以下内容:

SELECT SCOPE_IDENTITY()

这将选择最后插入的身份。

于 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

或者,您始终可以使用它来检索最新的标识:

SELECT IDENT_CURRENT('TABLE_NAME')

或使用

SELECT SCOPE_IDENTITY()
于 2012-04-19T08:36:51.130 回答
2

最好的方法是运行命令来获取最近插入的值。

您可以运行三个命令来执行此操作。

这个链接将解释它们

最好的是

SELECT SCOPE_IDENTITY()

因为如果您有一个调用触发器的表 A 并且此触发器在表 B 上插入数据,则此命令将为您获取表 A 的 ID,而 @@IDENTITY 将为您获取表 B 的 ID

于 2012-04-19T08:37:29.663 回答
1

而是使用:

select @@identity

代替select max(id)...

它将返回当前连接的最后生成的标识。

于 2012-04-19T08:36:16.867 回答
1

使用这个,但它适用于 PHP

$id = mysql_insert_id();

对于 c#

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

于 2012-04-19T08:41:18.120 回答
0

在 sql 中创建函数,您将在其中添加行并通过 SELECT SCOPE_IDENTITY() 获取 ID。当您调用函数时,您将获得完全添加的 ID。

于 2012-04-19T08:42:16.353 回答
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 回答