执行时间在简单选择查询中是无限的

问题描述 投票:0回答:1

相对较新。

我有一个存储过程,应在触发作业时运行。所有包含用于导入和测试的测试数据的文件(Excel工作表)都可以正常工作。在部署之前,我有一个新文件要用我的解决方案进行测试,但是在执行了给定新文件的作业之后,存储过程将继续加载而无需完成任何操作。

我试图删除(excel)文件并重新启动,但是它说它在另一个程序中打开(不是)。然后,我注意到,每当我尝试对存储过程中使用的表之一执行简单选择时,它只会保持加载状态并且永远不会完成。这些简单命令均无效。

我已经尝试过:

SELECT * FROM Cleaned_Rebate
SELECT TOP 1 * FROM Cleaned_Rebate
TRUNCATE TABLE Cleaned_Rebate
DELETE FROM Cleaned_Rebate
SELECT COUNT(*) FROM Cleaned_Rebate

我还试图创建一个与原始存储过程相同的新存储过程,但是它从未执行过create查询。它一直在加载。如果我删除90%的代码,它只会创建一个新代码。

我什至为了保存它(f5)仅添加一个注释都无法执行该存储过程...

我不知道什么是错,为什么,或者应该怎么做才能解决此问题。有谁知道可能出什么问题?任何建议表示赞赏!

我想补充一点,这些不是大表-其中有些甚至应该是空的。数据集也不大(大约100-300行?)

sql sql-server stored-procedures infinite execution-time
1个回答
0
投票

TRUNCATE TABLE希望完全访问该表:

TRUNCATE在其操作的每个表上获取ACCESS EXCLUSIVE锁on,它会阻止表上的所有其他并发操作。

一种选择是只等待一小段时间,因为如果截断失败,您将用DELETE清理表,因为]

SELECT * FROM Cleaned_Rebate;
SELECT TOP 1 * FROM Cleaned_Rebate;
SET lock_timeout TO '2s';
TRUNCATE TABLE Cleaned_Rebate;
DELETE FROM Cleaned_Rebate;
SELECT COUNT(*) FROM Cleaned_Rebate;
© www.soinside.com 2019 - 2024. All rights reserved.