我有一個存儲過程,它讀取狀態爲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服務器 –