在不同的查询SQL中插入并选择

时间:2012-04-19 08:32:22

标签: c# sql sql-server-2008 ado.net

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

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'查询。

8 个答案:

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

for more see here