Я пытаюсь выполнить хранимую процедуру SQL, которая выполняет некоторые вставки обновлений, и я передаю ей параметр под названием lcLogSessionId. Во время выполнения процедуры этот параметр устанавливается на 1, если есть ошибки, и остается на 0, если все работало правильно. В моем скрипте python мне нужно получить это значение в конце выполнения хранимой процедуры.

Это мой код:

stored_proc = "Exec [APP].[dataImport] @lcLogSessionId = %s"%(0)
conn = pyodbc.connect(connection_string, autocommit = True)
cursor = conn.cursor()
cursor.execute(stored_proc)

Я пытался получить курсор с помощью row = cursor.fetchone(), но получаю сообщение об ошибке: «Нет результатов. Предыдущий SQL не был запросом». Есть ли способ получить значение lcLogSessionId?

2
Federico Bruno 25 Май 2021 в 11:31
Вы видели это?
 – 
Gord Thompson
25 Май 2021 в 11:45
Большое спасибо, это именно то, что я искал!
 – 
Federico Bruno
25 Май 2021 в 13:19

1 ответ

Лучший ответ

Pyodbc в настоящее время не реализует необязательный метод .callproc(), поэтому для получения выходных параметров и возвращаемых значений требуется обходной путь. Для SQL Server, который включает анонимный блок кода для EXEC хранимой процедуры, а затем ВЫБРАТЬ значения, например,

sql = """\
DECLARE @out nvarchar(max);
EXEC [dbo].[test_for_pyodbc] @param_in = ?, @param_out = @out OUTPUT;
SELECT @out AS the_output;
"""
params = ("Burma!", )
crsr.execute(sql, params)
rows = crsr.fetchall()
while rows:
    print(rows)
    if crsr.nextset():
        rows = crsr.fetchall()
    else:
        rows = None

Более подробная информация на вики-странице pyodbc:

https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures#output-parameters-and-return-values

1
Gord Thompson 25 Май 2021 в 14:02