我正在编写一个脚本来自动执行文件加载过程。因此,我自然需要执行一些已存在的存储过程。我正在使用pyodbc连接到我的数据库。我可以从数据库中SELECT
完全正常,但是当我尝试从数据库执行时,我收到此错误:
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 10.0]
Syntax error, permission violation, or other nonspecific error (0) (SQLExecDirectW)')
我无法弄清楚这里的问题是什么 - 用户拥有完整的数据库管理员权限,根据pyodbc官方文档所说的语法是正确的。
print("Executing SP")
conn.execute('{EXEC TEMP.s_p_test}')
print("SP Executed.")
此处,TEMP
是该特定数据库中存储过程类型的模式。即,它是存储过程的全名。我觉得这可能是一件非常明显的事情,我只是缺席了。
答案 0 :(得分:0)
我尝试了几件事来解决它。正如@Brian Pendleton建议的那样,我曾尝试从通过UID
和PWD
定义的显式数据库用户更改为trusted_connection=True
。不幸的是,这没有任何改变。
然而,出于好奇,我决定看看从函数调用中取出花括号的内容是什么。执行立即起作用并产生所需的输出。似乎pyodbc wiki上的文档显示了不好的例子,或者我发现了一个我不知道如何复制的错误,因为我不知道是什么让我的情况变得异常。
或者换句话说,而不是
conn.execute('{EXEC TEMP.s_p_test}')
我用过
conn.execute('EXEC TEMP.s_p_test')