我有一个使用OpenQuery的链接服务器语句:
SELECT mycol1, mycol2, mycol3
FROM OPENQUERY(MYLINKEDSERVER, 'SELECT * FROM mysqldb.table')
上述工作在SSMS中没有任何疑虑。当我使用PHP MySQL包装器在Web应用程序上运行此查询(使用相同的SQL Server凭据)时,我必须插入以下两个语句:
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
我已经阅读了ANSI_NULLS和ANSI_WARNINGS的定义,但是不太明白为什么必须将它们设置为on才能使查询在PHP中运行。
有谁知道原因?
我的链接服务器是一个MySQL实例。
答案 0 :(得分:4)
据推测,SQL Server的未来版本默认情况下SET_NULLS设置为ON,没有更改选项
答案 1 :(得分:1)
在PHP中:
如果将它们全部合并到一个脚本中:
SET ANSI_NULLS ON;
SET ANSI_WARNINGS ON;
SELECT * FROM customers ...
发出错误。 可以合并两个MS SQL服务器。
答案 2 :(得分:0)
这几乎与this question重复。请注意,在这种情况下返回的错误消息是:
异构查询需要ANSI_NULLS和ANSI_WARNINGS选项 为连接设置。这确保了一致的查询语义。 启用这些选项,然后重新发出查询
事实上documentation确实说:
应将SET ANSI_NULLS设置为ON以执行分布式查询
它具有SET ANSI_WARNINGS的same comment。我怀疑正如Álvaro建议的那样,你的PHP代码隐藏了一个错误,并且很有可能它是上面提到的那个。 DBA网站上的This question更加详细。