sql server函数本机参数绑定

2024-09-30 07:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Ubuntu10.04 Lucid LTS上使用以下软件堆栈 连接到数据库:

  1. Python2.6.5(ubuntu包)
  2. pyodbc git trunk commiteb545758079a743b2e809e2e219c8848bc6256b2
  3. unixodbc 2.2.11(ubuntu包)
  4. freetds 0.82(ubuntu包)
  5. 带有Microsoft SQL Server 2000(8.0)的Windows

我在尝试在参数中进行本机参数绑定时遇到此错误 对于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',))

进一步的调查揭示了一些我想说的奇怪的事情:

  • 如果我把TDS版本改为4.2,一切都很好(但是, 来自sql server的版本报告错误--使用TDS版本4.2我得到 '95.08.0255'而不是真正的版本'08.00.0760')。在
  • 对于其他两种类型的功能,一切正常->; 返回值的函数和仅为SELECT的函数 查询(像视图)都可以正常工作。你甚至可以定义一个新函数 返回对另一个(中断的)函数的查询结果,以及 这样,即使在 参数。例如:CREATE FUNCTION fn_tempFunc(@testparam varchar(4)) RETURNS TABLE AS RETURN (SELECT * FROM fn_FuncTest(@testparam))
  • 此错误发生后,连接变得非常不稳定,无法恢复。在
  • 尝试绑定任何类型的数据时都会发生错误。在

我怎样才能更进一步呢?我想对函数参数进行本机绑定。在


Tags: 函数fromtest版本executesql参数server
1条回答
网友
1楼 · 发布于 2024-09-30 07:31:25

最终,这可能不是您要寻找的答案,但当我两三年前不得不从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

相关问题 更多 >

    热门问题