我有一个存储过程,它读取状态为x的行的ID,然后立即将该行ID设置为状态y。SQL存储过程按顺序等待并执行
由于这个存储过程被多个客户端应用程序调用,不知怎的,相同的值被返回,而实际上它的执行不应该在状态x中找到任何值。
我没有使用任何东西,而是在开始事务/提交中包装动作。
粗糙例如:
Begin Transaction
IF (@Param = '2') -- all
BEGIN
@resultID = (SELECT ... WHERE STATUS_ID = X
END
ELSE
BEGIN
@resultID = (SELECT ... WHERE STATUS_ID = X
END
IF (@ResultID > 0)
BEGIN
UPDATE JOB_QUEUE SET STATUS_ID = Y WHERE ID = @ResultID
END
COMMIT
SELECT * from JOB_QUEUE WHERE ID = @ResultID
不知该查询返回相同@resultID
从表..所以我假定我需要一些锁定或东西,以防止这一点。
是否有一种方法可以确保同时执行存储过程会导致一个执行,然后另一个(按顺序)?
谢谢。
标签DBMS使用的产品。 (看起来不像ANSI SQL ......) – jarlh
这是RDBMS的用途吗?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –
您好,这是为SQL服务器 –