我正在与SQL Server
建立连接以执行存储过程。 "轮询"服务器以确定存储过程是成功完成运行还是在 SP 花费超过 60 秒/3600 秒等时返回错误的正确方法是什么?
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433;DATABASE=dbname;UID=%s;PWD=%s' % (username, password))
cnxn.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'")
<pyodbc.Cursor object at 0x0000000002D6DDB0>
如何确定 SP 的状态?
考虑将
execute
包装在 try/except 中以捕获异常(包含错误)。如果未引发错误,则假定execute
运行正常。此外,请使用超时变量(以秒为单位),因为如果发生超时,数据库应引发OperationError
。
cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433;
DATABASE=dbname;UID={0};PWD={1}'.format(username, password))
cnxn.timeout = 60
cursor = cnxn.cursor()
try:
cnxn.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'")
except Exception as e:
print(e)
看起来您已经跳过了制作光标,因此您需要这样做,然后获取结果。试试这个:
import pyodbc
connection = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433;DATABASE=dbname;UID=%s;PWD=%s' % (username, password))
cursor = connection.cursor()
cursor.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'")
rows = cursor.fetchall()
for row in rows:
# Do stuff
print(row)