Python 3 pyodbc存储过程没有完全执行

时间:2018-01-24 19:49:51

标签: python sql-server stored-procedures pyodbc

我正在处理每月文件加载的脚本,需要在MS SQL数据库中使用存储过程。

当我通过pyodbc调用存储过程时,它开始执行,但它永远不会完成。我的伪代码如下:

cursor = db.cursor()
cursor.execute({'call stored_procedure'})
cursor.commit()

for n in range(1, 103):
    c2 = db.cursor()
    c2.execute('select IsFinished from '
               'procedure_statuses where '
               'procedure_name = "stored_procedure"')
    r = c2.fetchone()
    if r == True:
        c2.close()
        break
    c2.close()
    time.sleep(300)
cursor.close()

procedure_status的StartDate始终在运行开始时更改,但IsFinished永远不会更改,FinishedDate也不会更改。这些字段都在存储过程中更新,如此

update procedure statuses
    set IsFinished = 0, StartDate = GETDATE()
    where procedure_name = 'stored_procedure'

/* TONS OF STORED PROCEDURE */

update procedure_statuses
    set IsFinished = 1, FinishedDate = GETDATE()
    where procedure_name = 'stored_procedure'

return

我注意到第二个游标(“选择IsFinished”位)存在一个进程,但不存在活动监视器中的第一个进程。

那么,为什么pyodbc启动存储过程但没有完成呢?

*编辑:还应该注意,这是一个相当大的存储过程。 MSSQL Server内部的执行时间可以持续超过15分钟。如果这是大型存储过程的一个常见问题,我真的搞砸了,因为我还有一个可能需要几个小时才能触发的问题。

0 个答案:

没有答案