Questa è la mia prima domanda qui. Quindi, mi dispiace se è ripetuto o la formattazione è disattivata. Ho cercato tra le altre domande e l'errore è comune ma appare in più situazioni.Errore durante la chiamata a una procedura da pyodbc
Ho un codice Python molto semplice in cui voglio eseguire una procedura in MSSQL da pyodbc.
import pyodbc
conn = pyodbc.connect(r'DSN=myDSN')
cursor = conn.cursor()
query = r'{call myproc}'
cursor.execute(query)
Sto usando chiamata invece di exec dopo aver letto che utilizza ODBC chiamata per l'esecuzione di procedure in MSSQL.
L'errore che sto ottenendo è il seguente:
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)')
Grazie per l'aiuto
CALL è utilizzato per MySQL, non per MSSQL. – FlipperPA
@FlipperPA - In realtà, la sintassi '{CALL ...}' è un metodo standard per chiamare stored procedure tramite ODBC (e JDBC), e ha funzionato solo con me quando l'ho provato (con pyodbc 3.0.7 e SQL Server Native Client 10.0). –
Huh, mi ero imbattuto in errori con quello anni fa, ma ora che ci penso, potrebbe essere stato attraverso il DBD :: ODBC di Perl. Grazie, Gord! – FlipperPA