2

我有一个指定为 2005 的数据库项目。(这是在项目设置下的属性屏幕上。)

我们有几台服务器部署和运行,生产环境是 2005,但我们有一些 2008 R2 服务器可供我们开发,因此我们将项目指定为 2005。

我添加了我在仅用于开发的 2008R2 数据库上创建的存储过程。一切正常,所以我将它添加到数据库项目中。该项目构建和部署良好,这意味着它生成了 .sql 文件。我们不应用 VS 项目的更改。

我们有一个针对 2005 数据库运行的 CI TFS 构建。(我们有几个配置,每个配置都针对不同的数据库“部署”)。它构建和部署良好。同样,它仅将更新生成到 SQL 文件中。

存储过程包含以下代码:

    insert SiteCAChargeParameterSet
    values (
             ( select siteID 
                 from SiteCAChargeParameterSet
                where SiteCAChargeParameterSetID = @OldSiteCAChargeParameterSet
              ),
                @NewSetName,0,0,@UserID, @currentDate,@UserID, @currentDate
            )

定义了所有变量。当我尝试在 2005 数据库上创建此存储过程时,我收到一个错误 (1046),表明不允许选择“在此上下文中不允许子查询”。

我的问题是为什么编译器允许这样做。显然,因为我已经指出这是一个 sql server 2005 项目,所以它应该遵循该版本的规则。此外,由于它正在与 2005 数据库进行比较,因此也应该知道这是非法的。

我希望有一个我没有打开的选项或类似的东西。或者这只是 SQL“编译器”中的一个错误。

4

2 回答 2

0

如果您还没有这样做,请尝试在项目属性页面的“调试”选项卡上编辑“目标连接”,并确保它指向 SQL 2005 数据库。

这将确保 VS 为您的项目检查正确的 SQL 版本。

于 2012-09-10T15:10:36.727 回答
0

尝试将 2008r2 服务器上数据库的兼容级别设置为 90 (SQL Server 2005)。

ALTER DATABASE <database_name>
SET COMPATIBILITY_LEVEL = 90 

这可以允许检测不兼容的子选择。

于 2012-10-06T12:48:50.580 回答