我通过php + linux ODBC使用远程MSSQL库。一切都很好,但今天我用SET
+ PIVOT
写了一个查询并收到错误:
[unixODBC][FreeTDS][SQL Server]SELECT failed because the following SET options have
incorrect settings: 'ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL,
ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views
and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or
XML data type methods and/or spatial index operations.
我尝试编写SET ANSI_NULLS ON
等但它不起作用,结果中有0个字段。
通过MSSQL studio在服务器上直接执行的相同查询工作正常。
知道哪里可以成为问题?
感谢。
更新
freetds.conf
[syserver]
host =192.168.1.200
port = 1433
tds version = 7.0
AnsiNPW=YES
QuotedID=YES
ODBC.INI
[sy_odbc]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = syserver
Database = Insy
ODBCINST.INI
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
在我got tds version=6.0
之前,在将其更改为7.0之后,所有错误ANSI_NULLS
都消失了,但我的结果仍然是0行。 AnsiNPW=YES
和QuotedID=YES
对我无所作为。如果尝试在简单查询的结果中将版本更改为8.0,则??????????
。 <{1}} TDS_version=7.0
中的odbc.ini
也无所作为。
我的查询here。
我的连接字符串是:$conn=odbc_connect('sy_odbc','t','t');
更新2:
当我更改TDS_version to 7.0
或7.2
时,我的部分php页面停止工作,所以我将其恢复为6.0。
您提出的连接字符串对我不起作用。完全没有。 (我在使用我的时间超过了一年,在那个问题之前很好)
Here是6.0版本问题查询的错误日志(此处我们有ANSI_NULLS
等警告)
Here是7.0版本问题查询的错误日志(没有警告,但结果为0行)
答案 0 :(得分:0)
我还能想到以下两件事:Sergii:
1)您的连接字符串。 manual表示您的连接字符串应如下所示:
$conn = odbc_connect('Driver={sy_odbc};Server=192.168.1.200;Database=Insy', $username, $password);
所以我先试一试,看看是否有帮助。
2)每当您遇到ODBC连接问题时,都应该打开日志记录,以便捕获错误消息。为此,请将以下行添加到/etc/odbcinst.ini文件中:
[ODBC]
Trace = yes
TraceFile = /tmp/odbc.log
如果您的查询仍无效,请编辑您的问题并添加odbc.log文件的输出(假设其中有错误消息)。