我很好奇这是否能实现,因为我目前正面临一个bug,我想看看在事务中放入SELECT和UPDATE是否能修复它(如果你想知道我为什么不发布导致bug的代码,那是因为这是一个复杂的环境,我无法发布所有影响因素)。
与此相关,我还感兴趣的是,如果您曾经经历过在SELECT查询之后编写UPDATE查询的代码,但UPDATE在SELECT之前执行(排除了脚本可能运行两次的可能性)。
这取决于事务的含义。有两种类型的交易:
-
隐式事务:与
INSERT
、UPDATE
、SELECT
、DELETE
语句一样,在这些语句中没有显式事务命令,如果发生错误,数据库引擎将回滚整个语句 -
显式事务:在这种情况下,事务中包含的语句作为一个单元执行,
COMMIT
表示整个事务,或者ROLLBACK
因此,不能在一个查询中同时包含SELECT
和UPDATE
,但可以在事务中包含它们,例如:
START TRANSACTION;
SELECT * FROM tableName;
UPDATE table SET something = 'other something' WHERE thirdsomething = @s;
COMMIT;
然后将它们放入存储过程或UDF中。
请注意:SELECT
语句不会修改数据,因此您可能不需要将其包含在事务中,因此在您只有UPDATE
语句的情况下,您可以只使用没有事务的存储过程。