pyodbc存储过程/ Microsoft SQL Server错误42000

时间:2017-12-21 20:06:16

标签: python mysql sql-server stored-procedures pyodbc

我正在编写一个脚本来自动执行文件加载过程。因此,我自然需要执行一些已存在的存储过程。我正在使用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是该特定数据库中存储过程类型的模式。即,它是存储过程的全名。我觉得这可能是一件非常明显的事情,我只是缺席了。

1 个答案:

答案 0 :(得分:0)

我尝试了几件事来解决它。正如@Brian Pendleton建议的那样,我曾尝试从通过UIDPWD定义的显式数据库用户更改为trusted_connection=True。不幸的是,这没有任何改变。

然而,出于好奇,我决定看看从函数调用中取出花括号的内容是什么。执行立即起作用并产生所需的输出。似乎pyodbc wiki上的文档显示了不好的例子,或者我发现了一个我不知道如何复制的错误,因为我不知道是什么让我的情况变得异常。

或者换句话说,而不是

conn.execute('{EXEC TEMP.s_p_test}')

我用过

conn.execute('EXEC TEMP.s_p_test')