Python SQL Server调用不使用事务

2024-10-01 07:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的Python脚本,在这个脚本中,我向sqlserver2008存储过程发送一个调用,该存储过程又通过xp_cmdshell使用bcp。当我通过管理控制台调用SP时,它工作正常。当我从python脚本调用它时,它会挂起,因为执行会阻塞用于bcp结果的tempdb。在

有没有一种方法可以在不使用事务的情况下从Python发出调用(因为我认为这个附加的附加组件将我的调用锁定为挂起)。在

这是我的剧本:


import pyodbc as p

def CallExportFiles(conn, procName):
sql = "DECLARE @ret int EXEC @ret = [db].[dbo].[" + procName + "] @I_EMAILPROFILE = N\'SQL_AlertProfile\', @I_EMAILALERTS = N\'xxx@yyy.com\', @I_CUSTOMERID = N\'xxx\', @I_ENVIRO = N\'prod\', @I_COAFILENAME = N\'InvoiceGL\', @I_PERSONFILENAME = N\'Person\', @I_DELEGATESFILENAME = N\'Delegates\', @I_VENDORFILENAME = N\'InvoiceVendors\', @I_DIRECTORY = N\'\\\\xxx\\output\\yyy\\\', @I_ARCHIVEDIR = N\'\\\\xxx\\output\\yyy\\ARCHIVE\\\', @I_FAILUREDIR = N\'\\\\xxx\\output\\yyy\\FAILURE\\\' SELECT \'Return Value\' = @ret"
dbCursor = conn.cursor()
##Locks on this next execute call
dbCursor.execute(sql)
dbCursor.commit()


if __name__ == '__main__':
#connectin to the db with SQL Authentification
conn = p.connect(driver = '{SQL Server Native Client 10.0}', server = r'server', database = 'db', uid = 'sa', pwd = 'xxx')

if (conn == False):
    print 'Error, did not connect to the database'
else:
    CallExportFiles(conn, 'sp_export_files')

conn.close()

在存储过程中调用时锁定的部分是在这里执行的(注意:这个存储过程可以很好地使用来自Management Studio的相同字符串:


^{pr2}$

Tags: 脚本outputexecutedbsql过程connxxx