What steps will reproduce the problem?
1. db = pyodbc.connect(...)
2. c = db.cursor()
3. c.execute('sp_spaceused object_name')
What is the expected output? What do you see instead?
The expected output is a cursor containing the result set from the stored procedure.
Instead I get this:
>>> c.execute("{call sp_spaceused some_table}")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]SELECT INTO command not allowed within multi-statement transaction.\n (226) (SQLExecDirectW)')
What version of the product are you using? On what operating system?
2.1.7, freetds, Sybase ASE 15.
Please provide any additional information below.
Is there anything that can be done to not implicitly set up a transaction, as I expect is happening here? This also happens when autocommit is set to False.
Autocommit defaults to False, you need to set it to true: cnxn.autocommit = True rows = c.execute("sp_spaceused object_name").fetchall() cnxn.autocommit = False or cnxn = pyodbc.connect(..., autocommit=True) rows = ... I've added something to the FAQ for this. Thanks.Mergedinto: 134