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中引入)。或者至少是身份价值。你现在得到的东西很可能有问题...... –