我有一个指定为 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“编译器”中的一个错误。