2011-01-27 120 views
5

这是我的问题:我有一个名为emp的SQL Server数据库。它有一个employee表(与userid int列)。我需要在employee表中检索userid的最后一条记录,其中递增用户ID值为1.此刻,我在我的GUI上执行了此操作。那么如何为它编写一个sql查询?检索SQL Server表的最后一条记录

回答

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值。

+0

感谢您快速的依靠JK.but我的requiremnt是this.my gui有一个叫做new emloyee.so的表单,它有一个文本表达式,它显示了emp表中的用户id。当点击add新员工我想要显示该测试val作为emp id +1的最后一个值。 – 2011-01-27 10:07:08

+1

如果您需要在实际添加员工之前显示新员工的ID,请使用上面的查询:SELECT MAX(UserId)+ 1 FROM Employees`。但是,当新员工实际保存时,这可能不会是Id号码。 – 2011-01-27 10:10:29

2

要返回最高的用户ID的记录,你可以这样做:

SELECT TOP 1 userid 
FROM employee 
ORDER BY userid DESC 

或...

SELECT MAX(userid) 
FROM employee 

如果你的计划是再手动增加用户ID,并插入一个新的用这个新ID记录下来,我建议不要这样做 - 如果两个进程同时尝试这样做会怎么样?相反,请使用IDENTITY列作为用户标识符,并自动为您处理递增

-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 
+0

问题已解决感谢所有的快速响应 – 2011-01-27 10:15:05

-1

要在保存之前创建新的用户标识,请创建一个NextId表。

之前插入用户,从NextId获得新的价值:

UserId = SELECT Coalesce(NextId, 0) + 1 from NextId 

然后更新NextID表:

UPDATE NEXTID SET NextId = IserID 

,然后在用户创建代码使用该值

你可以获得差距,有更复杂的方法来避免它们;但我认为这会做