1

使用する発行プロファイルまたは sqlcmd 変数に基づいてデータベース オブジェクトを変更する方法を見つけようとしています。具体的には、データベース プロジェクトをサーバー A と B に展開するとします。サーバー AI ではストアド プロシージャの 1 つのバージョンが必要であり、サーバー BI では別のバージョンのストアド プロシージャが必要です。依存関係の理由から、ストアド プロシージャは両方のサーバーで同じ名前にする必要があります。配置後スクリプトと動的 SQL を使用してこれを行う方法を知っています。より良い選択肢を探しています。

4

1 に答える 1

0

それが質問のスターターにとって実際のものであるかどうかはわかりませんが、誰かの助けになるかもしれません. 次のことができます。

  1. $(DeployType) などの変数を作成し、すべての発行構成で一意の値に設定します

  2. 次のコードでデータベースを変更します。

.

 CREATE PROCEDURE p_test 
  AS
 BEGIN
 IF '$(DeployType)' = 'Production'
  BEGIN
 /*Your code for production database*/
 END
 IF '$(DeployType)' = 'Dev'
  BEGIN
 /*Your code for devdatabase*/
  END
  END

その場合、それはまさにあなたが望むものであるはずです。ビュー/関数を使用すると、次のようなことができます。

CREATE VIEW v_test AS
SELECT 1
FROM table 
WHERE '$(DeployType)' = 'Production'
UNION ALL
SELECT 1
FROM table2 
WHERE '$(DeployType)' = 'Dev'

オプティマイザーが WHERE 条件をチェックし、ユニオンの 1 つの部分が常に NULL であることを確認して実行しないため、パフォーマンスが低下することは想定されていません。

于 2015-03-12T13:00:12.647 に答える