我有一个服务器和许多客户端,我的应用程序在客户端和服务器上的数据库,我有一个表
Table --> Id --> int Auto-increment,
Name --> nvarchar(50),
因此,每当我从客户端插入带有查询
的新行时Insert into Table Name Values('NameValue')
它插入行并且sql auto生成Id字段。因此,要获取其Id,我使用以下查询
Select max(Id) as maxId from Table
但两个查询都在不同的连接上
当一次只运行一个客户端时,它运行良好,但是当多个客户端正在运行时,客户端请求许多插入查询,然后才能请求'getMaxId'查询。
答案 0 :(得分:2)
您可以使用以下内容:
SELECT SCOPE_IDENTITY()
这将选择最后插入的标识。
答案 1 :(得分: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()
答案 2 :(得分:2)
最好的方法是运行一个命令来获取最近插入的值。
您可以运行三个命令来执行此操作。
This链接将解释它们
最好的是
SELECT SCOPE_IDENTITY()
因为如果你有一个调用触发器的表A并且这个触发器在表B上插入数据,这个命令将获得表A的ID,而@@ IDENTITY将获得表B的id
答案 3 :(得分:1)
而是使用:
select @@identity
而不是select max(id)...
它将返回当前连接的最后生成标识。
答案 4 :(得分:1)
使用它,但它适用于PHP
$ id = mysql_insert_id();
和c#
Int32 newId =(Int32)myCommand.ExecuteScalar();
答案 5 :(得分:0)
插入后添加以下内容而不是Max(id)选择。
SELECT SCOPE_IDENTITY()
答案 6 :(得分:0)
在sql中创建函数,您将在其中添加行并通过SELECT SCOPE_IDENTITY()获取ID。当您调用函数时,您将获得完全添加的ID。
答案 7 :(得分: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')