【发布时间】:2014-12-11 18:10:56
【问题描述】:
我有一个将信息插入 SQL 数据库的应用程序。然后它必须运行一个繁重的存储过程。问题是当我对该 SP 的调用超过 2 或 3 次时,它开始抛出错误。
我为避免这个问题所做的就是在表格中添加一个标志,例如:
IF NOT EXISTS(SELECT TOP 1 File_Key FROM File WHERE Flag_Value = 3)
BEGIN
WHILE EXISTS(SELECT TOP 1 File_Key FROM File WHERE Flag_Value = 1)
BEGIN
DECLARE @LocalFile_Key int = (SELECT TOP 1 File_Key FROM File WHERE Flag_Value = 1)
UPDATE File
SET Flag_Value = 3
WHERE File_Key = @LocalFile_Key
File Process...
Update File
Set Flag_Value = 2
Where File_Key = @LocalFile_Key
END
END
但我仍然可以看到有时 2 个存储过程会运行,这很奇怪。当存储出现问题时,它会留下 Flag_Value '3',因此它会锁定存储过程。
【问题讨论】:
-
您应该将 SP 包装在具有适当隔离级别的事务中。
标签: mysql sql tsql stored-procedures