我在Ubuntu10.04 Lucid LTS上使用以下软件堆栈 连接到数据库:
eb545758079a743b2e809e2e219c8848bc6256b2
我在尝试在参数中进行本机参数绑定时遇到此错误 对于SQL SERVER函数:
Traceback (most recent call last):
File "/home/nosklo/devel/testes/sqlfunc.py", line 32, in <module>
cur.execute("SELECT * FROM fn_FuncTest(?)", ('test',))
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL
Server]SqlDumpExceptionHandler: Process 54 generated fatal exception
c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this
process.\r\n (0) (SQLPrepare)')
这是复制代码:
^{pr2}$现在函数被创建了。如果我尝试在查询中使用值直接调用它(没有值的本机绑定),则可以正常工作:
cur.execute("SELECT * FROM fn_FuncTest('test')")
assert cur.fetchone()[0] == 'test'
但是,当我尝试执行本机绑定时(通过使用参数占位符并分别传递值),会出现上述错误:
cur.execute("SELECT * FROM fn_FuncTest(?)", ('test',))
进一步的调查揭示了一些我想说的奇怪的事情:
4.2
我得到
'95.08.0255'
而不是真正的版本'08.00.0760'
)。在CREATE FUNCTION fn_tempFunc(@testparam
varchar(4)) RETURNS TABLE AS RETURN (SELECT * FROM
fn_FuncTest(@testparam))
我怎样才能更进一步呢?我想对函数参数进行本机绑定。在
最终,这可能不是您要寻找的答案,但当我两三年前不得不从Perl连接到MSSQL时,ODBC+FreeTDS一开始就涉及到了,但我并没有得到任何进展(尽管我不记得具体的错误,但我正试着做绑定,这似乎是一些问题的根源)。在
在Perl项目中,我最终使用了一个针对Sybase的驱动程序(MSSQL是从这个驱动程序派生出来的),所以您可能需要研究一下。在
Python wiki有一个关于Sybase的页面和另一个关于SQL Server的页面,您可能需要仔细阅读这些页面以寻找替代方案:
http://wiki.python.org/moin/Sybase
http://wiki.python.org/moin/SQL%20Server
相关问题 更多 >
编程相关推荐