ALTER PROCEDURE (Transact-SQL)
更新 : 2005 年 12 月 5 日
CREATE PROCEDURE ステートメントを使用して作成した既存のプロシージャを変更します。ALTER PROCEDURE では権限は変更されず、従属ストアド プロシージャまたはトリガに影響することはありませんが、QUOTED_IDENTIFIER と ANSI_NULLS の現在のセッション設定は、変更時にストアド プロシージャに取り込まれます。ストアド プロシージャの最初の作成時に有効であった設定と変更後の設定が異なる場合、ストアド プロシージャの動作が変わる可能性があります。
構文
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 ステートメントを使用して一度に削除できます。メモ : この機能は、将来のバージョンの 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) のストアド プロシージャには指定できません。
メモ : データベース エンジンでは、アップグレード中に、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 識別子で、アセンブリ内にクラスとして存在する必要があります。クラス名に名前空間とその区切り文字のピリオド (.) が含まれる場合は、クラス名をかっこ ([]) または引用符 (""**) で区切る必要があります。指定するメソッドは、クラスの静的メソッドであることが必要です。メモ : 既定では、SQL Server で CLR コードを実行することはできません。CLR モジュールを参照するデータベース オブジェクトを作成、変更、削除することはできませんが、これらの参照を SQL Server で実行するには、clr enabled option を有効にする必要があります。このオプションを有効にするには、sp_configure を使用します。
解説
Transact-SQL ストアド プロシージャを CLR ストアド プロシージャに変更したり、その逆に変更することはできません。
詳細については、「CREATE PROCEDURE (Transact-SQL)」の「解説」を参照してください。
メモ : |
---|
以前のプロシージャ定義が 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)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2005 年 12 月 5 日 |
|