我正在使用EXE每小時調用一次存儲過程來將數據從一組表移動到另一個表,同時還更新另一個表中的計數以顯示多少次存儲過程運行。 EXE用一定數量調用存儲過程來告訴存儲過程要運行哪個插入。所以每隔一小時,這個過程是跑了兩次:存儲過程跳過更新語句
If @intUploadNumber = 1
INSERT INTO Prod1
SELECT *
FROM Staging1
UPDATE tbl_Count
SET UpdateCount = UpdateCount + 1
WHERE Date = CAST(GETDATE() AS DATE)
If @intUploadNumber = 2
INSERT INTO Prod2
SELET *
FROM Staging2
UPDATE tbl_Count
SET UpdateCount = UpdateCount + 1
WHERE Date = CAST(GETDATE() AS DATE)
基本上調用由程序的EXE:
exec STRPRC 1
exec STRPRC 2
在存儲過程的底部如下:
IF ((select updatecount from tbl_Count WHERE Date = CAST(GETDATE() AS DATE)) % 2 = 0)
BEGIN
INSERT INTO Prod3
SELECT *
FROM PROD1
LEFT JOIN PROD2 ON PROD1.CID = PROD2.CID
END
但是,我注意到我的代碼,即使兩個exec都被正確調用,並且從分段執行的所有內容都進入了生產環境,但存儲過程通常會經過最後一個if語句,而不是e執行我的最終插入。
有誰知道MS SQL的問題會允許這種情況發生嗎?也許是因爲這兩次調用存儲過程時,updatecount在它碰到最終的if語句時沒有被正確設置?我還有一個TRY ... CATCH環繞SQL,它應該把我所有的錯誤轉儲到另一個表中,但它仍然是空的。如果需要更多細節,請告訴我。 (不,我不能遠離EXE調用兩個單獨的初始插入的移動,它們必須單獨調用。)
謝謝
*總是使用BEGIN/END塊分隔符連「有誰知道用MS SQL中的問題,將允許這樣的事情發生嗎?」 *是,它做你告訴它。我建議你在那裏設置一個斷點,或者放入一些日誌記錄或者其他東西,並且確保'select updatecount from tbl_Count WHERE Date = CAST(GETDATE()AS DATE))%2 = 0'返回的值是你認爲的值是。 –
您是否真的複製並粘貼了該代碼? B/c明顯的錯字在SELET – peterG
您需要提供更多詳細信息。也許你有這個整個事情在一個空的捕獲嘗試?你需要養成明確的插入習慣。您需要爲每列指定名稱,而不是使用select *作爲源。 –