我们的开发和生产服务器是相同的,除了容量(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'。
如果我删除collate 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数据库,它就会失败。
到底是怎么回事?
谢谢。
答案 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会考虑您所连接的数据库的级别。