这是我的问题:我有一个名为emp
的SQL Server数据库。它有一个employee
表(userid int
列)。我需要在userid
表中检索employee
的最后一条记录,其中增加的用户标识值为+ 1.此时我在我的GUI上执行了此操作。那么如何为它编写SQL查询呢?
答案 0 :(得分:3)
要返回具有最高用户ID的记录,您可以执行以下操作:
SELECT TOP 1 userid
FROM employee
ORDER BY userid DESC
...或
SELECT MAX(userid)
FROM employee
如果您的计划是手动增加用户ID并插入带有新ID的新记录,我建议不要这样做 - 如果2个进程同时尝试执行此操作会怎么样?而是使用IDENTITY列作为用户ID,并自动为您处理递增
答案 1 :(得分:1)
您不应手动递增userid列,而是使用IDENTITY列。这将为每个新行自动添加1。
CREATE TABLE Employees (
UserId INT IDENTITY PRIMARY KEY NOT NULL,
UserName NVARCHAR(255) NOT NULL,
// etc add other columns here
)
如果你真的必须选择最高的用户ID,那么这是一个非常简单的查询:
SELECT MAX(UserId) + 1
FROM Employees
[编辑]
根据您的评论,您应该使用SELECT MAX(UserId) + 1 FROM Employees
查询。但请注意,这并不能保证数字将是ID。通常,在将记录保存到数据库之前,您不会显示Id值。
答案 2 :(得分:-1)
这将为您提供最后插入的记录,如果您没有标识列。
EXECUTE ('DECLARE GETLAST CURSOR DYNAMIC FOR SELECT * FROM [User]')
OPEN GETLAST
FETCH LAST FROM GETLAST
CLOSE GETLAST
DEALLOCATE GETLAST
如果您设置了身份,则可以使用以下内容。
SELECT top(1) ID from [YourTable] order by ID desc
答案 3 :(得分:-1)
要在保存之前拥有新的用户标识,请创建一个NextId表。
在插入用户之前,从NextId获取新值:
UserId = SELECT Coalesce(NextId, 0) + 1 from NextId
然后更新NextID表:
UPDATE NEXTID SET NextId = IserID
然后在您的用户创建代码中使用该值
你可以获得差距,有更复杂的方法来避免它们;但我认为这样做