我们的开发和生产服务器是相同的,除了容量(RAM,磁盘等):MS Win Server 2008 R2企业/ 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”附近的语法不正确。
如果我删除整理dabatase_default子句,我得到这个错误(按预期):
[Microsoft] [SQL Server Native Client 10.0] [SQL Server]无法解决UNION操作中“SQL_Latin1_General_CP1_CI_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的sorting规则冲突。
如果将prod代码指向开发数据库,它的工作原理。 另一方面,如果我将de dev代码指向prod数据库,则失败。
究竟是怎么回事?
谢谢。
我相信你在服务器上有不同的默认排序规则,这会导致问题。
select somecol collate database_default from localtable union select somecol collate SQL_Latin1_General_CP1_CI_AS from linkedserver.remotedb.dbo.table
请发布什么排序在列上。
谢谢所有想要帮助的人。
这是我们的错:我们连接到兼容级别设置为70的第三个数据库。因此,SQL server正在解释此设置下的查询。 我们将兼容性级别切换到80,并按预期工作。
有趣的是,查询中涉及的数据库的兼容性级别是不相关的。 SQL server将关联您连接的数据库的级别。