PHP:等效服务器上的SQL语法错误

时间:2015-04-22 14:06:04

标签: php sql-server windows apache

我们的开发和生产服务器是相同的,除了容量(RAM,磁盘等):MS Win Server 2008 R2 Ent / MS SQL Server 2005 / Apache2.2 / PHP 5.213。在我们的开发机器中,以下(总结)sql完美运行:

SELECT somecol collate database_default 
FROM localtable
UNION
SELECT somecol collate database_default 
FROM linkedserver.remotedb.dbo.table

注意:链接服务器在dev / prod服务器中都是相同的。

prod 服务器中,它会出现以下错误:

  

[Microsoft] [SQL Server Native Client 10.0] [SQL Server]语法不正确   靠近' DATABASE_DEFAULT'。

如果我删除collat​​e dabatase_default子句,我会收到此错误(正如预期的那样):

  

[Microsoft] [SQL Server Native Client 10.0] [SQL Server]无法解析   " SQL_Latin1_General_CP1_CI_AI"之间的整理冲突和   " SQL_Latin1_General_CP1_CI_AS"在UNION行动中。

如果将prod代码指向dev数据库,则可以正常工作。另一方面,如果我将de dev代码指向prod数据库,它就会失败。

到底是怎么回事?

谢谢。

2 个答案:

答案 0 :(得分:0)

我相信你在服务器上有不同的默认排序规则并且它会解决问题。

select somecol collate database_default from localtable
union
select somecol collate SQL_Latin1_General_CP1_CI_AS from linkedserver.remotedb.dbo.table

请在列上发布排序规则。

答案 1 :(得分:0)

感谢所有试图提供帮助的人。

这是我们的错:我们连接到第三个数据库,兼容级别设置为70.因此,SQL Server在此设置下解释查询。我们将兼容级别切换为80,并且按预期工作。

值得注意的是,查询中涉及的数据库的兼容性级别无关紧要。 SQL Server会考虑您所连接的数据库的级别。