ストアド プロシージャの変更

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2012 でストアド プロシージャを変更する方法について説明します。

  • 作業を開始する準備: 制限事項と制約事項、セキュリティ

  • プロシージャの変更に使用するもの:  SQL Server Management Studio、Transact-SQL

作業を開始する準備

制限事項と制約事項

[先頭に戻る]

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

以前のプロシージャ定義が WITH ENCRYPTION または WITH RECOMPILE を使用して作成されている場合、これらのオプションは、ALTER PROCEDURE ステートメントに指定されるときだけ有効になります。

セキュリティ

権限

[先頭に戻る]

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

ストアド プロシージャを変更する方法

次のどちらかを使用します。

  • SQL Server Management Studio

  • Transact-SQL

SQL Server Management Studio の使用

Management Studio でプロシージャを変更するには

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. [データベース] を展開し、プロシージャが属するデータベースを展開し、[プログラミング] を展開します。

  3. [ストアド プロシージャ] を展開し、変更するプロシージャを右クリックして、[変更] をクリックします。

  4. ストアド プロシージャのテキストを変更します。

  5. 構文をテストするには、[クエリ] メニューの [解析] をクリックします。

  6. 変更をプロシージャの定義に保存するには、[クエリ] メニューの [実行] をクリックします。

  7. 更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] をクリックします。 ファイル名をそのまま使用するか、または別の名前を入力し、[保存] をクリックします。

セキュリティに関する注意セキュリティに関する注意

すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。

Transact-SQL の使用

クエリ エディターでプロシージャを変更するには

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. [データベース] を展開し、プロシージャが属するデータベースを展開します。 または、ツール バーの利用可能なデータベースの一覧からデータベースを選択します。 この例では AdventureWorks2012 データベースを選択します。

  3. [ファイル] メニューの [新しいクエリ] をクリックします。

  4. 次の例をコピーし、クエリ エディターに貼り付けます。 この例では、Adventure Works Cycles データベース内のすべてのベンダーの名前と、そのベンダーの提供製品、信用格付け、およびベンダーが現時点で製品を提供できるかどうかを返す uspVendorAllInfo プロシージャが作成されます。

    USE AdventureWorks2012;
    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 '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
    
  5. [ファイル] メニューの [新しいクエリ] をクリックします。

  6. 次の例をコピーし、クエリ エディターに貼り付けます。 この例では、uspVendorAllInfo プロシージャが変更されます。 EXECUTE AS CALLER 句が削除され、指定した製品を供給するベンダーだけを返すようにプロシージャの本体が変更されます。 ここでは、LEFT 関数および CASE 関数を使用して、結果セットの表示をカスタマイズします。

    USE AdventureWorks2012;
    GO
    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
    
  7. 変更をプロシージャの定義に保存するには、[クエリ] メニューの [実行] をクリックします。

  8. 更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] をクリックします。 ファイル名をそのまま使用するか、または別の名前を入力し、[保存] をクリックします。

  9. 変更したストアド プロシージャを実行するには、次の例を実行します。

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
    GO
    

[先頭に戻る]

関連項目

参照

ALTER PROCEDURE (Transact-SQL)