回答
适用于SQL Server - **,但只适用于**如果您有主键类型为“INT IDENTITY”(或“BIGINT IDENTITY”) - 任何其他类型的PK(如GUID或其他) *由'SCOPE_IDENTITY()'支持' –
真实的,好的一点......我会+1你的答案,因为你已经覆盖了这种情况。 –
@marc_s:或数字(x,0):猜测SCOPE_IDENTITY()的类型... http://msdn.microsoft.com/en-us/library/ms190315.aspx – gbn
对于SQL Server 2005和了,不管是什么类型的主关键是,你总是可以用OUTPUT
clause返回插入的值:
INSERT INTO dbo.YourTable(col1, col2, ...., colN)
OUTPUT Inserted.PrimaryKey
VALUES(val1, val2, ....., valN)
这是要走的路,因为它适用于任何主键。它需要执行一个标量查询而不是一个非查询执行,但这是微不足道的。 – ChokesMcGee
好方法,但是如果你的表有触发器,你必须使用OUTPUT ... INTO ...输出到中间表。 – Ian
对于MySQL,使用LAST_INSERT_ID()
http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
你也应该能够启动一个事务,插入该行,并使用具有您刚刚插入的唯一值的一些字段中选择该行,像时间戳或指导。这应该适用于任何支持事务的RDBMS,只要您有一个很好的唯一字段来选择行。
MS SQL
您可以使用@@ IDENTITY。在插入语句后,您可以运行:
select @@identity
这将为您提供刚刚插入的记录的主键。如果您打算以后使用它,我建议将其保存:如果您在存储过程中使用这一点,并希望访问它放回你的应用程序
set @MyIdentity = @identity
,确保已关闭NOCOUNT。
如果你有'IDENTITY'列 - 我建议你使用['SCOPE_IDENTITY()'而不是'@@ IDENTITY'](http://blog.sqlauthority.com/2007/03/25/sql-server-身份 - 范围 - 身份 - 身份 - 身份 - 当前 - 检索 - 最后插入身份记录) –
对于PostgreSQL:
SELECT CURRVAL(pg_get_serial_sequence('schema.table','id'))
来源:https://stackoverflow.com/questions/2944297/postgresql-function-for-last-inserted-id
PGSQL可以做得更好,检查退货。 – BastetFurry
根据BastetFurry的评论,请参阅['INSERT'](http://www.postgresql.org/docs/current/static/sql-insert.html)“命令的'RETURNING'子句。引用doc:'可选的RETURNING子句会导致INSERT根据实际插入的每一行计算并返回一个或多个值。这主要用于获取默认值提供的值,例如序列号 –
如果你需要的时候出现在表上的触发器,那么你必须使用一个小的解决方法来检索MS SQL的新指标。简单的OUTPUT将不起作用。你必须做这样的事情(在VB.NET):
DECLARE @newKeyTbl TABLE (newKey INT);
INSERT INTO myDbName(myFieldName) OUTPUT INSERTED.myKeyName INTO @newKeyTbl VALUES('myValue'); " & _
SELECT newKey FROM @newKeyTbl;"
如果使用.NET,然后从该查询返回的值可以直接转换为一个整数(你必须调用“的ExecuteScalar”上.NET SqlCommand来获得返回)。
select MAX(id_column) from table
那在理论上应该返回你最后插入的id。如果它是一个繁忙的数据库,并且有很多插入操作,则可能无法获得您刚完成的操作,而是另一个。
无论如何,替代其他方法。
- 1. 插入视图中不返回主键
- 2. 执行插入命令并返回在Sql中插入的ID
- 3. SQL:连接主键上的表并返回主键
- 4. 插入增量主键SQL多行
- 5. pygresql - 插入并返回串行
- 6. TransactionScope主键插入,然后外键插入 - >插入2主键行
- 7. SQL:插入表并返回新索引?
- 8. 插入行jdbc的主键?
- 9. Xamarin sqlite的插入不返回最后一个主键ID
- 10. 如何返回最后一个主键插入
- 11. jpa当插入行应返回用于主键列的序列号
- 12. DataGridView插入主键
- 13. Oracle - 返回新插入的键值
- 14. Sql插入语句返回“零/无行插入”
- 15. SQL查询返回由主键
- 16. 插入主键时插入外键?
- 17. 如何从数据库插入返回串行主键用于另一个分区插入
- 18. 如何用LINQ和C#插入记录并返回该记录的主键
- 19. LINQ to SQL:插入非标识主键
- 20. 主键上的SQL插入错误
- 21. LINQ到SQL插入主键索引
- 22. SQL唯一键插入
- 23. 获取最后插入的行主键
- 24. SQL检查是否存在值并返回主键
- 25. MyBatis插入和返回键 - 注解/主要/ MySql
- 26. Linq-to-Entity获得主键返回插入到Oracle
- 27. 返回主键在插入时不工作的MyBatis弹簧
- 28. Sql - 用回车插入文本返回
- 29. 返回使用jQuery/AJAX当SQL插入ID插入一行到数据库
- 30. 插入记录并保留主键值
您正在使用哪种RBDMS? –