我试图在插入语句后得到一个键值。 例子: 我有一个表的属性名称和id。Id是一个生成的值。

    INSERT INTO table (name) VALUES('bob');

现在我想在同一步骤中取回id。这是怎么做到的?

我们使用的是Microsoft SQL Server 2008。


当前回答

@@IDENTITY是一个系统函数,返回最后插入的标识值。

其他回答

在插入一个带有identity列的表之后,你可以引用@@IDENTITY来获取值: http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx

有多种方法可以获取插入命令后最后插入的ID。

@@IDENTITY : It returns the last Identity value generated on a Connection in current session, regardless of Table and the scope of statement that produced the value SCOPE_IDENTITY(): It returns the last identity value generated by the insert statement in the current scope in the current connection regardless of the table. IDENT_CURRENT(‘TABLENAME’) : It returns the last identity value generated on the specified table regardless of Any connection, session or scope. IDENT_CURRENT is not limited by scope and session; it is limited to a specified table.

现在似乎更难决定哪一个能完全符合我的要求。

我更喜欢SCOPE_IDENTITY()。

如果在insert语句中使用select SCOPE_IDENTITY()和TableName,您将得到您所期望的确切结果。

来源:CodoBee

使用SCOPE_IDENTITY()获取新的ID值

INSERT INTO table (name) VALUES('bob');

SELECT SCOPE_IDENTITY()

http://msdn.microsoft.com/en-us/library/ms190315.aspx

@@IDENTITY是一个系统函数,返回最后插入的标识值。

*参数在连接字符串中的顺序有时很重要。* Provider参数的位置可以在添加一行后中断记录集游标。我们在SQLOLEDB提供程序中看到了这种行为。

添加行之后,行字段不可用,除非Provider被指定为连接字符串中的第一个参数。当提供程序位于连接字符串中的任何位置(除了第一个参数之外)时,新插入的行字段将不可用。当我们将提供者移动到第一个参数时,行字段神奇地出现了。