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

问题描述 投票:1回答:1

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

python mysql sql-server stored-procedures pyodbc
1个回答
0
投票

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

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

换句话说,而不是

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

我用了

conn.execute('EXEC TEMP.s_p_test')
© www.soinside.com 2019 - 2024. All rights reserved.