2011-01-27 81 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 

,然後在用戶創建代碼使用該值

你可以獲得差距,有更復雜的方法來避免它們;但我認爲這會做

相關問題