我在我的應用程序中需要唯一標識符。爲此,我在我的數據庫中創建了一個只包含1個'unique_id'(BIGINT)和1行的表。 想法是在需要時使用存儲過程獲取下一個標識符。像這條線操作將做的工作:SQL Server - 1列更新,是否需要鎖定?
UPDATE identifier_table SET unique_id = unique_id + 1 OUTPUT INSERTED.unique_id
有人可以證實,如果這個操作是原子,或者我需要設置在表上的鎖
感謝
我在我的應用程序中需要唯一標識符。爲此,我在我的數據庫中創建了一個只包含1個'unique_id'(BIGINT)和1行的表。 想法是在需要時使用存儲過程獲取下一個標識符。像這條線操作將做的工作:SQL Server - 1列更新,是否需要鎖定?
UPDATE identifier_table SET unique_id = unique_id + 1 OUTPUT INSERTED.unique_id
有人可以證實,如果這個操作是原子,或者我需要設置在表上的鎖
感謝
它是原子?!它只是一個單獨的更新語句,並且完全沒有任何問題,因爲它將由具有更新鎖的引擎進行管理。 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語句或其他存儲過程輕鬆地使用它。
謝謝ErikE!晚會有點晚,但它證實了我的發現:o) – Bourgui
爲什麼你不使用身份字段? – HLGEM
+1爲HGLEM,爲什麼不只是使用身份,或如果在Denali上的序列。 – Andrew
感謝您的答案!想象它會達到同樣的目的,只保留表中的一行 - 不要想/不知道如何更新標識列。我知道這些天空間很便宜,那麼我最好是插入行並不時清理一下? – Bourgui