【发布时间】:2016-04-29 00:38:44
【问题描述】:
这是我在这里的第一个问题。因此,如果重复或格式已关闭,我很抱歉。我搜索了其他问题,错误很常见,但出现在多种情况下。
我有一个非常简单的 python 代码,我想从 pyodbc 执行 MSSQL 中的过程。
import pyodbc
conn = pyodbc.connect(r'DSN=myDSN')
cursor = conn.cursor()
query = r'{call myproc}'
cursor.execute(query)
在阅读了 ODBC 使用 call 在 MSSQL 中执行过程之后,我使用 call 而不是 exec。
我得到的错误如下:
Traceback (most recent call last):
File "myscript.py", line 26, in <module>
cursor.execute(query)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]The current transaction has aborted, and any pending changes have been rolled back. Cause: A transaction in a rollback-only state was not explicitly rolled back before a DDL, DML or SELECT statement. (111233) (SQLExecDirectW)')
感谢您的帮助
【问题讨论】:
-
CALL 用于 MySQL,而不是 MSSQL。
-
@FlipperPA - 实际上,
{CALL ...}语法是通过 ODBC(和 JDBC)调用存储过程的标准方法,当我尝试它时它确实对我有用(使用 pyodbc 3.0.7和 SQL Server Native Client 10.0)。 -
嗯,几年前我遇到过错误,但现在我想,这可能是通过 Perl 的 DBD::ODBC。感谢上帝!
标签: python sql-server stored-procedures pyodbc