1
在這本書中的「T-SQL基礎」,對於「UPDATE」與「轉讓」的查詢中,筆者指出:爲什麼在UPDATE語句中賦值變量不是事務性的?
的專業UPDATE語法運行的事務,它比更 效率使用單獨的UPDATE和SELECT語句,因爲它只能訪問一次數據 。請注意,變量賦值不是 事務性的,但。
CREATE TABLE dbo.MySequences
(
id VARCHAR(10) NOT NULL CONSTRAINT PK_MySequences PRIMARY KEY(id),
val INT NOT NULL
);
INSERT INTO dbo.MySequences VALUES('SEQ1', 0);
DECLARE @nextval AS INT;
UPDATE dbo.MySequences
SET @nextval = val += 1
WHERE id = 'SEQ1';
SELECT @nextval AS nextValue;
我有點困惑,爲什麼「UPDATE」語句運行的事務,但變量賦值(即SET @nextval = val +
= 1)不是事務性的?不是「UPDATE」語句的變量賦值部分嗎?
有人能澄清這個概念嗎?
數據庫的ACID屬性適用於表格,而不適用於標量變量。 –
非常感謝您的評論。所以我只是想知道,如果「UPDATE」事務失敗會發生什麼情況,失敗將如何影響「SELECT @nextval AS nextValue」?再次感謝你的幫助! – Thor
如果這是實際的代碼(而不僅僅是一個問題的樣本),我建議使用一個實際的序列(在SQL 2012中引入)。或者至少是身份價值。你現在得到的東西很可能有問題...... –