1

我通过 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.

我尝试编写 SETANSI_NULLS ON等,但它不起作用,结果中有 0 个字段。通过 MSSQL 工作室直接在服务器上执行的相同查询完美运行。知道哪里有问题吗?谢谢。

更新:
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

在 I 之前got tds version=6.0,以及将其更改为 7.0 之后,所有错误ANSI_NULLS都消失了,但结果中仍然有 0 行。AnsiNPW=YESQuotedID=YES为我做任何事。如果尝试在简单查询的结果中将版本更改为 8.0,我有??????????TDS_version=7.0odbc.ini也无所作为。

我的查询在这里。我的连接字符串是:$conn=odbc_connect('sy_odbc','t','t');

更新 2:当我更改或
时,我的一些 php 页面停止工作,所以我将其返回到 6.0。 您建议的连接字符串对我不起作用。完全没有。(我用我的一年多了,在那个问题之前很好)是6.0版本的问题查询的错误日志(这里我们有等警告)是7.0版本的问题查询的错误日志(没有警告,但结果为 0 行) TDS_version to 7.07.2

ANSI_NULLS

4

1 回答 1

0

我能想到的还有两件事 Sergii:

1)您的连接字符串。手册说您的连接字符串应如下所示:

$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 文件的输出(假设其中有错误消息)。

于 2013-03-19T13:36:25.087 回答