Как получить возвращаемое значение хранимой процедуры SQL Server, используя pyodbc?
Моя команда использует вики-сервер на основе Python, который вызывает хранимые процедуры в базе данных SQL Server. В идеале мы хотели бы вернуть целочисленные значения (1,0,-1) из хранимой процедуры, чтобы показать основные результаты.
Согласно ветке 2008 года в группах Google, возвращаемые значения не поддерживаются pyod bc, поэтому альтернативой является ВЫБРАТЬ результат в виде строки и проверить его. Это все еще так? Существует ли (поддерживаемый и задокументированный) программный способ проверки возвращаемого значения хранимых процедур SQL? (Если это так, пожалуйста, добавьте текущую ссылку или пример.)
4 ответа
Вот некоторая соответствующая информация: http://code.google.com/p/pyodbc/wiki/StoredProcedures
Похоже, возвращаемые значения по-прежнему не поддерживаются, поэтому вам нужно будет использовать SELECT
,
Я использую это:
def CallStoredProc(conn, procName, *args):
sql = """DECLARE @ret int
EXEC @ret = %s %s
SELECT @ret""" % (procName, ','.join(['?'] * len(args)))
return int(conn.execute(sql, args).fetchone()[0])
Он работает только на SQL Server (или, возможно, Sybase), но это достойный обходной путь.
Я добавил следующее, чтобы заставить его работать в моем приложении:
def CallStoredProc(conn, procName, *args):
sql = """SET NOCOUNT ON;
DECLARE @ret int
EXEC @ret = %s %s
SELECT @ret""" % (procName, ','.join(['?'] * len(args)))
return int(conn.execute(sql, args).fetchone()[0])
Я использовал аналогичное решение Гейба, и мне нужны были именованные параметры:
def call_stored_procedure(conn, procName, **args):
query = ""
for key, value in args.items():
query = query+',@'+key+'='+'\"'+str(value)+'\"'
query = query[ 1:]
sql = """ SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
SET NOCOUNT ON
DECLARE @ret int
EXEC @ret = %s %s
COMMIT
SELECT @ret""" % (procName, query)
id = conn.execute(sql).fetchone()[0]
call_stored_procedure(conn, "MY_StoredProcedure", **payload)