Rob*_*cks 46 mysql sql sql-server
假设我在Customers表中有以下数据:(仅此而已)
ID FirstName LastName
-------------------------------
20 John Mackenzie
21 Ted Green
22 Marcy Nate
Run Code Online (Sandbox Code Playgroud)
什么类型的SELECT语句可以在ID列中获取数字22?
我需要做这样的事情来生成一个唯一的ID.当然我可以通过自动增量让系统执行此操作,但是我如何获得自动生成的ID?
我想到了"从客户中选择ID"并计算返回的行,但这看起来非常无效,在这种情况下,它会错误地返回"3",尽管我需要23的唯一ID.
Dav*_*res 17
如果您刚刚将一条记录插入到Customers表中,并且您需要最近填充的ID字段的值,则可以使用SCOPE_IDENTITY函数.这仅在INSERT发生在与SCOPE_IDENTITY调用相同的范围内时才有用.
INSERT INTO Customers(ID, FirstName, LastName)
Values
(23, 'Bob', 'Smith')
SET @mostRecentId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
这可能对你有用,也可能没用,但这是一个很好的技巧.它也适用于自动生成的列.
Joe*_* Jr 10
SELECT * FROM Customers ORDER BY ID DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
然后获取ID.
要随时获得它,你可以做到SELECT MAX(Id) FROM Customers
.
但是,在添加它的过程中,您还可以使用SCOPE_IDENTITY
- 来获取该过程最后添加的id.
这样更安全,因为它可以保证您获得 - Id
以防其他人同时被添加到数据库中.
如果你在说MS SQL,这是最有效的方法.这将根据标识的任何列从表中检索当前标识种子.
select IDENT_CURRENT('TableName') as LastIdentity
Run Code Online (Sandbox Code Playgroud)
使用MAX(id)
更通用,但是例如我有一个包含4亿行的表,需要2分钟才能获得MAX(id)
. IDENT_CURRENT
几乎是瞬间......
归档时间: |
|
查看次数: |
135370 次 |
最近记录: |