我试图在插入语句后得到一个键值。 例子: 我有一个表的属性名称和id。Id是一个生成的值。
INSERT INTO table (name) VALUES('bob');
现在我想在同一步骤中取回id。这是怎么做到的?
我们使用的是Microsoft SQL Server 2008。
我试图在插入语句后得到一个键值。 例子: 我有一个表的属性名称和id。Id是一个生成的值。
INSERT INTO table (name) VALUES('bob');
现在我想在同一步骤中取回id。这是怎么做到的?
我们使用的是Microsoft SQL Server 2008。
当前回答
最好和最可靠的解决方案是使用SCOPE_IDENTITY()。
你只需要在每次插入后获取作用域标识并将其保存在一个变量中,因为你可以在同一个作用域中调用两个插入。
Ident_current和@@identity可能是他们工作,但他们不是安全范围。在大型应用程序中可能会出现问题
declare @duplicataId int
select @duplicataId = (SELECT SCOPE_IDENTITY())
更多细节在这里微软文档
其他回答
使用SCOPE_IDENTITY()获取新的ID值
INSERT INTO table (name) VALUES('bob');
SELECT SCOPE_IDENTITY()
http://msdn.microsoft.com/en-us/library/ms190315.aspx
建议使用SCOPE_IDENTITY()来获取新的ID值,而不是使用“OUTPUT Inserted”。ID”
如果插入语句抛出异常,我将直接抛出它。而是“输出插入”。ID”将返回0,这可能与预期不同。
最好和最可靠的解决方案是使用SCOPE_IDENTITY()。
你只需要在每次插入后获取作用域标识并将其保存在一个变量中,因为你可以在同一个作用域中调用两个插入。
Ident_current和@@identity可能是他们工作,但他们不是安全范围。在大型应用程序中可能会出现问题
declare @duplicataId int
select @duplicataId = (SELECT SCOPE_IDENTITY())
更多细节在这里微软文档
在插入一个带有identity列的表之后,你可以引用@@IDENTITY来获取值: http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx
不需要单独的SELECT…
INSERT INTO table (name)
OUTPUT Inserted.ID
VALUES('bob');
这也适用于非identity列(比如guid)