【问题标题】:Pyodbc execute two dependend procedurespyodbc 执行两个依赖过程
【发布时间】:2021-08-11 01:38:10
【问题描述】:

我有两个空表 ABA 由步骤 1 的过程馈送,B 表在步骤 2 中根据表 A 数据馈送。我的问题是程序执行后 A 包含数据而不是 B。 我尝试单独执行第 2 步(不是同一个程序),效果很好。

import pyodbc
database = 'database '
driver= '{SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute('''EXEC [dbo].[LoadDataTableA]''') #Step 1
cursor.execute('''EXEC [dbo].[LoadDataTableB]''') #Step 2
cnxn.commit()
cnxn.close()

【问题讨论】:

    标签: python-3.x pyodbc


    【解决方案1】:

    您需要为您的存储过程设置NO COUNT ON,否则pyodbc 认为该过程的任何输出都是该过程的结束,并将继续到下一个execute。使用NOCOUNT ON,它将等待程序完成。还要检查存储过程是否没有PRINT 语句或RAISEERROR,因为它们也会触发结束execute

    import pyodbc
    database = 'database '
    driver= '{SQL Server}'
    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    cursor.execute('''SET NO COUNT ON; EXEC [dbo].[LoadDataTableA]''') #Step 1
    cursor.execute('''SET NO COUNT ON; EXEC [dbo].[LoadDataTableB]''') #Step 2
    cnxn.commit()
    cnxn.close()
    

    【讨论】:

    • 我试过了,但还是有问题。我需要添加 Sleep() 吗?
    • 实际上我在 sp 内有一个 print,并且我在每个 sp 内都设置了 NO COUNT ON。对吗?
    • @MaherKebaier No NO COUNT ON 仅影响“(n) 行受影响”语句。您还需要从存储过程中删除打印语句,因为pyodbc 会认为这意味着过程也已完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多