2

2005として指定されたデータベースプロジェクトがあります(これは、プロジェクト設定の下のプロパティ画面にあります)。

2005年に本番環境に対して展開および実行するサーバーがいくつかありますが、開発対象の2008 R2サーバーがいくつかあるため、プロジェクトを2005として指定します。

開発専用の2008R2データベースで作成したストアドプロシージャを追加しました。すべて正常に動作するので、データベースプロジェクトに追加しました。プロジェクトは正常にビルドおよびデプロイされました。つまり、.sqlファイルが生成されます。VSプロジェクトからの変更は適用されません。

2005データベースに対して実行されるCITFSビルドがあります。(いくつかの構成があり、それぞれが異なるデータベースに対して「デプロイ」されます)。それはうまく構築され、展開されました。ここでも、更新を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

まだ行っていない場合は、プロジェクトのプロパティページの[デバッグ]タブで[ターゲット接続]を編集して、SQL2005データベースを指していることを確認してください。

これにより、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 に答える