ストアド プロシージャの変更
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
この記事では、SQL Server Management Studio または Transact-SQL を使用して、SQL Server でストアド プロシージャを変更する方法について説明します。
制限事項と制約事項
Transact-SQL ストアド プロシージャを CLR ストアド プロシージャに変更したり、その逆に変更することはできません。
以前のプロシージャ定義が WITH ENCRYPTION または WITH RECOMPILE を使用して作成されている場合、これらのオプションは、ALTER PROCEDURE ステートメントに指定されるときだけ有効になります。
Permissions
プロシージャに対する ALTER PROCEDURE 権限が必要です。
SQL Server Management Studio の使用 [SQL Server]
SQL Server Management Studio でプロシージャを変更するには:
オブジェクト エクスプローラーで、 データベース エンジン のインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開し、 [プログラミング] を展開します。
[ストアド プロシージャ] を展開し、変更するプロシージャを右クリックして、 [変更] を選択します。
ストアド プロシージャのテキストを変更します。
構文をテストするには、 [クエリ] メニューの [解析] を選択します。
変更をプロシージャの定義に保存するには、 [クエリ] メニューの [実行] を選択します。
更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] を選択します。 ファイル名をそのまま使用するか、または新しい名前に置き換え、 [保存] を選択します。
重要
すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。 詳細については、「SQL インジェクション」を参照してください
Transact-SQL の使用
T-SQL コマンドを使用してプロシージャを変更するには:
オブジェクト エクスプローラーで、 データベース エンジン のインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開します。 または、ツール バーの利用可能なデータベースの一覧からデータベースを選択します。 この例では
AdventureWorks2022
データベースを選択します。[ファイル] メニューで [新しいクエリ] を選択します。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、
uspVendorAllInfo
データベース内のすべてのベンダーの名前と、そのベンダーの提供製品、信用格付け、およびベンダーが現時点で製品を提供できるかどうかを返す Adventure Works Cycles プロシージャが作成されます。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 'Rating', v.ActiveFlag AS Availability FROM Purchasing.Vendor v INNER JOIN Purchasing.ProductVendor pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product p ON pv.ProductID = p.ProductID ORDER BY v.Name ASC; GO
重要
既存のストアド プロシージャを削除して再作成すると、ストアド プロシージャに明示的に与えられている権限が削除されます。 代わりに ALTER を使用してください。
[ファイル] メニューで [新しいクエリ] を選択します。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、
uspVendorAllInfo
プロシージャが変更されます。EXECUTE AS CALLER
句が削除され、指定した製品を供給するベンダーだけを返すようにプロシージャの本体が変更されます。 ここでは、LEFT
関数およびCASE
関数を使用して、結果セットの表示をカスタマイズします。ALTER PROCEDURE Purchasing.uspVendorAllInfo @Product varchar(25) AS SET NOCOUNT ON; SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name', '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.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE p.Name LIKE @Product ORDER BY v.Name ASC; GO
変更をプロシージャの定義に保存するには、 [クエリ] メニューの [実行] を選択します。
更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] を選択します。 ファイル名をそのまま使用するか、または新しい名前に置き換え、 [保存] を選択します。
変更したストアド プロシージャを実行するには、次の例を実行します。
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO
次の手順
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示