ALTER PROCEDURE (Transact-SQL)

更新 : 2005 年 12 月 5 日

CREATE PROCEDURE ステートメントを使用して作成した既存のプロシージャを変更します。ALTER PROCEDURE では権限は変更されず、従属ストアド プロシージャまたはトリガに影響することはありませんが、QUOTED_IDENTIFIER と ANSI_NULLS の現在のセッション設定は、変更時にストアド プロシージャに取り込まれます。ストアド プロシージャの最初の作成時に有効であった設定と変更後の設定が異なる場合、ストアド プロシージャの動作が変わる可能性があります。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] 
     [ { @parameter [ type_schema_name. ] data_type } 
    [ VARYING ] [ = default ] [ [ OUT [ PUT ] 
    ] [ ,...n ] 
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ] 
AS 
     { <sql_statement> [ ...n ] | <method_specifier> }

<procedure_option> ::= 
    [ ENCRYPTION ]
    [ RECOMPILE ]
    [ EXECUTE_AS_Clause ]

<sql_statement> ::= 
{ [ BEGIN ] statements [ END ] }

<method_specifier> ::=
EXTERNAL NAME 
assembly_name.class_name.method_name

引数

  • schema_name
    プロシージャが属するスキーマの名前を指定します。
  • procedure_name
    変更するプロシージャの名前を指定します。プロシージャ名は、識別子の規則に従っている必要があります。
  • **;**number
    同じ名前のプロシージャをグループ化するために使用する既存の整数を指定します (省略可能)。グループ化されたプロシージャは、DROP PROCEDURE ステートメントを使用して一度に削除できます。

    ms189762.note(ja-jp,SQL.90).gifメモ :
    この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
  • **@**parameter
    プロシージャ内のパラメータを指定します。パラメータは 2,100 個まで指定できます。
  • [ type_schema_name**.** ] data_type
    パラメータのデータ型とそれが属するスキーマを指定します。

    データ型の制約については、「CREATE PROCEDURE (Transact-SQL)」を参照してください。

  • VARYING
    出力パラメータとしてサポートされている結果セットを指定します。このパラメータはストアド プロシージャによって動的に作成され、その内容は変化します。カーソル パラメータにのみ適用されます。
  • default
    パラメータの既定値です。
  • OUTPUT
    パラメータが、戻りパラメータであることを示します。
  • RECOMPILE
    SQL Server 2005 データベース エンジンでは、このプロシージャ用のプランをキャッシュせず、実行時にプロシージャを再コンパイルします。
  • ENCRYPTION
    データベース エンジンで、ALTER PROCEDURE ステートメントの元のテキストを、暗号化した形式に変換することを示します。暗号化した形式の出力は、SQL Server 2005 内のどのカタログ ビューでも直接見ることはできません。システム テーブルまたはデータベース ファイルへのアクセス権を持たないユーザーは、暗号化した形式のテキストを取得できません。DAC ポート経由でシステム テーブルにアクセスする権限、または直接データベース ファイルにアクセスする権限を持っているユーザーは、このテキストを使用できます。また、サーバー プロセスにデバッガをアタッチできるユーザーは、実行時、元のプロシージャをメモリから取得できます。システム メタデータへのアクセスの詳細については、「メタデータ表示の構成」を参照してください。

    このオプションを使って作成したプロシージャを、SQL Server レプリケーションの一部として発行することはできません。

    このオプションは、共通言語ランタイム (CLR) のストアド プロシージャには指定できません。

    ms189762.note(ja-jp,SQL.90).gifメモ :
    データベース エンジンでは、アップグレード中に、sys.sql_modules に格納されている暗号化コメントにより、プロシージャが再作成されます。
  • EXECUTE AS
    アクセス後にストアド プロシージャを実行するセキュリティ コンテキストを指定します。

    詳細については、「EXECUTE AS 句 (Transact-SQL)」を参照してください。

  • FOR REPLICATION
    レプリケーション用に作成したストアド プロシージャは、サブスクライバでは実行できないことを示します。FOR REPLICATION オプションを指定して作成したストアド プロシージャは、ストアド プロシージャ フィルタとして使用され、レプリケーション時にのみ実行されます。FOR REPLICATION を指定した場合、パラメータは宣言できません。RECOMPILE オプションは、FOR REPLICATION を使って作成されたプロシージャでは無視されます。
  • AS
    プロシージャが行う動作です。
  • <sql_statement>
    プロシージャに含まれる任意の数と種類の Transact-SQL ステートメントを指定します。いくつかの制約があります。詳細については、「CREATE PROCEDURE (Transact-SQL)」の「<sql_statement> の制限」を参照してください。
  • EXTERNAL NAME , assembly_name**.class_name.method_name
    CLR ストアド プロシージャで参照する Microsoft .NET Framework アセンブリのメソッドを指定します。class_name は有効な SQL Server 識別子で、アセンブリ内にクラスとして存在する必要があります。クラス名に名前空間とその区切り文字のピリオド (
    .) が含まれる場合は、クラス名をかっこ ([]) または引用符 (""**) で区切る必要があります。指定するメソッドは、クラスの静的メソッドであることが必要です。

    ms189762.note(ja-jp,SQL.90).gifメモ :
    既定では、SQL Server で CLR コードを実行することはできません。CLR モジュールを参照するデータベース オブジェクトを作成、変更、削除することはできませんが、これらの参照を SQL Server で実行するには、clr enabled option を有効にする必要があります。このオプションを有効にするには、sp_configure を使用します。

解説

Transact-SQL ストアド プロシージャを CLR ストアド プロシージャに変更したり、その逆に変更することはできません。

詳細については、「CREATE PROCEDURE (Transact-SQL)」の「解説」を参照してください。

ms189762.note(ja-jp,SQL.90).gifメモ :
以前のプロシージャ定義が WITH ENCRYPTION または WITH RECOMPILE を使用して作成されている場合、これらのオプションは、ALTER PROCEDURE に指定されるときだけ有効になります。

権限

プロシージャに対する ALTER 権限が必要です。

次の例では、uspVendorAllInfo ストアド プロシージャを作成します。このプロシージャは、Adventure Works Cycles を提供するすべてのベンダの名前と、そのベンダの提供製品、信用格付け、およびベンダが現時点で製品を提供できるかどうかを返します。このプロシージャを作成した後、別の結果セットを返すようプロシージャを変更します。

USE AdventureWorks;
GO
IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL 
    DROP PROCEDURE Purchasing.uspVendorAllInfo;
GO
CREATE PROCEDURE Purchasing.uspVendorAllInfo
WITH EXECUTE AS CALLER
AS
    SET NOCOUNT ON;
    SELECT v.Name AS Vendor, p.Name AS 'Product name', 
      v.CreditRating AS 'Credit Rating', 
      v.ActiveFlag AS Availability
    FROM Purchasing.Vendor v 
    INNER JOIN Purchasing.ProductVendor pv
      ON v.VendorID = pv.VendorID 
    INNER JOIN Production.Product p
      ON pv.ProductID = p.ProductID 
    ORDER BY v.Name ASC;
GO

次の例では、uspVendorAllInfo ストアド プロシージャを変更し (EXECUTE AS オプションなし)、指定した製品を供給するベンダだけを返します。ここでは、LEFT 関数および CASE 関数を使用して、結果セットの表示をカスタマイズします。

ALTER PROCEDURE Purchasing.uspVendorAllInfo
    @Product varchar(25) 
AS
    SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name', 
    'Credit rating' = CASE v.CreditRating 
        WHEN 1 THEN 'Superior'
        WHEN 2 THEN 'Excellent'
        WHEN 3 THEN 'Above average'
        WHEN 4 THEN 'Average'
        WHEN 5 THEN 'Below average'
        ELSE 'No rating'
        END
    , Availability = CASE v.ActiveFlag
        WHEN 1 THEN 'Yes'
        ELSE 'No'
        END
    FROM Purchasing.Vendor AS v 
    INNER JOIN Purchasing.ProductVendor AS pv
      ON v.VendorID = pv.VendorID 
    INNER JOIN Production.Product AS p 
      ON pv.ProductID = p.ProductID 
    WHERE p.Name LIKE @Product
    ORDER BY v.Name ASC;
GO
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
GO

以下に結果セットを示します。

Vendor               Product name        Credit rating Availability
-------------------- ------------------- ------------- ------------
Proseware, Inc.      LL Crankarm         Average       No
Vision Cycles, Inc.  LL Crankarm         Superior      Yes

(2 row(s) affected)

参照

関連項目

CREATE PROCEDURE (Transact-SQL)
流れ制御言語 (Transact-SQL)
データ型 (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL)
関数 (Transact-SQL)
sp_depends (Transact-SQL)
sp_procoption (Transact-SQL)
sp_recompile (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.parameters (Transact-SQL)
sys.procedures (Transact-SQL)
sys.sql_dependencies (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.numbered_procedures (Transact-SQL)
sys.numbered_procedure_parameters (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)

その他の技術情報

バッチ
カーソル (データベース エンジン)
ストアド プロシージャ (データベース エンジン)
変数とパラメータの使用 (データベース エンジン)
パブリケーション データベースでのスキーマの変更
ストアド プロシージャを変更する方法 (SQL Server Management Studio)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

変更内容
  • ENCRYPTION オプションの定義を明記。