2011-07-22 24 views
1

我在我的應用程序中需要唯一標識符。爲此,我在我的數據庫中創建了一個只包含1個'unique_id'(BIGINT)和1行的表。 想法是在需要時使用存儲過程獲取下一個標識符。像這條線操作將做的工作:SQL Server - 1列更新,是否需要鎖定?

UPDATE identifier_table SET unique_id = unique_id + 1 OUTPUT INSERTED.unique_id 

有人可以證實,如果這個操作是原子,或者我需要設置在表上的鎖

感謝

+4

爲什麼你不使用身份字段? – HLGEM

+0

+1爲HGLEM,爲什麼不只是使用身份,或如果在Denali上的序列。 – Andrew

+0

感謝您的答案!想象它會達到同樣的目的,只保留表中的一行 - 不要想/不知道如何更新標識列。我知道這些天空間很便宜,那麼我最好是插入行並不時清理一下? – Bourgui

回答

0

它是原子?!它只是一個單獨的更新語句,並且完全沒有任何問題,因爲它將由具有更新鎖的引擎進行管理。 SE輸出如圖所示,或者你可以做這樣的事情:

DECLARE @unique_id bigint; 

UPDATE identifier_table 
SET 
    @unique_id = unique_id + 1, 
    unique_id = unique_id + 1; 

SELECT @unique_id uniqueid; 

如果您@unique_id OUTPUT參數,那麼你就可以得到價值不select語句或其他存儲過程輕鬆地使用它。

+0

謝謝ErikE!晚會有點晚,但它證實了我的發現:o) – Bourgui

相關問題