2

基本的にデータベースから現在のバージョン番号を取得し、バージョンが有効な場合は多数のストアド プロシージャを作成する db update スクリプトを作成しています。現在のバージョンが予想されるバージョンと一致しない場合は、コードの実行をスキップする必要があります。

ただし、CREATE PROCEDURE はバッチの最初のステートメントである必要があるため、スクリプトを作成するときに問題が発生します。そのため、create プロシージャ ステートメントの前に if .. else ステートメントを挿入することはできません。

GOTO も使用してみましたが、GOTO は複数のバッチにまたがらないため、役に立ちませんでした。同じことが RETURN と RAISEERROR にも当てはまります - 残りのコードは引き続き実行されます。

サンプル スクリプト:

IF @Version = '1.0' --doesn't work
BEGIN
    CREATE PROCEDURE dbo.uspCreateAccount
    AS BEGIN
    --The rest of the code goes here
    END
END

誰でもこれについて洞察を提供できますか?

4

2 に答える 2

4

機能を使用してこれを実現できexecます。

IF @Version = '1.0'
BEGIN
    --Drop it if it already exists
    IF OBJECT_ID('uspCreateAccount', 'P') IS NOT NULL
        EXEC ('DROP PROCEDURE uspCreateAccount')
    --Recreate it.
    EXEC('
          CREATE PROCEDURE uspCreateAccount
          AS BEGIN
          --The rest of the code goes here
          END
    ')
END
于 2013-09-30T07:14:48.717 に答える