我正在使用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 *作为源。 –