开发者环境db server为SqlServer 2005(开发者版)
有什么方法可以确保我的 SQL 查询将在 SqlServer 2000 中运行?
此数据库设置为兼容级别“SQL Server 2000 (80)”,但某些在开发系统中运行没有问题的查询无法在测试服务器 (SqlServer) 中运行。
(问题似乎在子查询中)
开发者环境db server为SqlServer 2005(开发者版)
有什么方法可以确保我的 SQL 查询将在 SqlServer 2000 中运行?
此数据库设置为兼容级别“SQL Server 2000 (80)”,但某些在开发系统中运行没有问题的查询无法在测试服务器 (SqlServer) 中运行。
(问题似乎在子查询中)
兼容性级别旨在以相反的方式工作 - 允许较旧版本的 T-SQL 代码无需修改即可在较新版本的 SQL Server 上工作。更改通常涉及 T-SQL 语法和保留字,并且可以使用 SQL Server 2005 功能,例如兼容级别 80 的数据库索引中的 INCLUDED 列。但是,您不能使用 2005 T-SQL 功能,例如 CROSS申请。
您最好的选择是针对 SQL Server 2000 实例开发/测试您的所有代码。请注意,您可以使用 2005 的 Management Studio 连接到 SQL Server 2000 实例,因此您不必在工具方面倒退。
问题解决了:
在相关子查询中,您必须(在 SQL2000 中)显式定义外部字段。
SQL2005:
SELECT * FROM WHERE EXISTS (SELECT * FROM Collaterals WHERE COLLATERAL_LOAN=LOAN_NUMBER)
SQL2000:
SELECT * FROM WHERE EXISTS (SELECT * FROM Collaterals WHERE COLLATERAL_LOAN=Loans.LOAN_NUMBER)
你应该总是显式定义所有的字段,否则你写错了就不会报错
SELECT * FROM Loans WHERE EXISTS (SELECT * FROM Collaterals WHERE LOAN_NUMBER=Loans.LOAN_NUMBER)
如果 Collaterals-table 没有 LOAN_NUMBER 列,则使用 Loans-table 代替。