2
我們有一張用於生成唯一數字鍵的表格。這些鍵然後在其他表中用作PrimaryKey。表結構是這樣的:SQL Server如何處理UPDATE事務?
TableName VARCHAR
CurrentKey INT
所以我們的數據在此表像
TableName Customers
CurrentKey 400
所以,當我們需要爲表Customers
下一個主鍵,我們從這個表,其中TableName
是Customers
的CurrentKey
,它會給我們400我們增加(400 + 1)它,我們也更新表中的這個關鍵。所以我們的CurrentKey
現在是401。
我們爲此目的而使用的SQL是:
SQL1:
DECLARE @CurrentKey INT
UPDATE myTable
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
我的問題是,我們是否需要鎖定表,以便項可能不如果多個用戶調用複製這是在同一時間?我確信,SQL Server將不允許重複的數據,但我不知道如何...查詢與表鎖:
SQL2
BEGIN TRANSACTION
DECLARE @CurrentKey INT
UPDATE myTable WITH (TABLOCKX)
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
END TRANSACTION
可有人請解釋一下SQL Server如何處理UPDATE
電話?
你應該真的把它留給SQL Server來處理連續的數字,通過使用'INT IDENTITY'列類型。 **不要試圖自己做這件事!**有很多方法可以失敗...... –
敢問我爲什麼要重新發明'IDENTITY'列?另外爲什麼你會集中保留一個當前值的表格?浪費時間,可能是錯誤的,並且不如直接查詢表格準確。 – Bridge
數據庫超過12歲,我不允許更改舊的邏輯! –