Я использую удаленную базу MSSQL через php + linux ODBC. Все было хорошо, но сегодня я написал запрос с 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, отлично работает. Есть идеи, где может быть проблема? Спасибо.
ОБНОВЛЕНИЕ:
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 в результате простого запроса, у меня будет ??????????
. TDS_version=7.0
в odbc.ini
тоже ничего не делают.
Мой запрос здесь. И моя строка подключения: $conn=odbc_connect('sy_odbc','t','t');
Обновление 2:
Некоторые из моих php-страниц перестают работать, когда я изменил TDS_version to 7.0
или 7.2
, поэтому я возвращаю его обратно на 6.0.
Строка подключения, которую вы предложили, мне не подходит . Вообще. (Я использую свой более года, и до этого выпуска все было нормально)
Вот журнал ошибок для проблемного запроса с версией 6.0 (здесь есть ANSI_NULLS
предупреждений и т. д.)
Здесь журнал ошибок для проблемного запроса с 7.0 версия (предупреждений нет, но в результате 0 строк)
tds version
в вашем freetds.conf и / или значениеTDS_Version
в вашем odbc.ini. Если ничего из этого не работает, обновите свой вопрос, указав полный файл freetds.conf, odbcinst.ini, odbc.ini, оператор SQL, который вы пытаетесь выполнить, и код, показывающий, как вы подключаетесь к базе данных. - person Benny Hill   schedule 18.03.2013odbc_exec()
, а это не === FALSE ? Если он возвращает FALSE, вы должны выполнитьodbc_errormsg()
. - person Benny Hill   schedule 20.03.2013echo odbc_errormsg();
:( - person Sergii Rechmp   schedule 21.03.2013