ストアド プロシージャの変更
このトピックでは、SQL Server Management Studioまたは Transact-SQL を使用して、SQL Server 2014 のストアド プロシージャを変更する方法について説明します。
プロシージャを変更するには、次を使用します:SQL Server Management Studio、Transact-SQL
はじめに
制限事項と制約事項
Transact-SQL ストアド プロシージャを CLR ストアド プロシージャに変更したり、その逆に変更することはできません。
以前のプロシージャ定義が WITH ENCRYPTION または WITH RECOMPILE を使用して作成されている場合、これらのオプションは、ALTER PROCEDURE ステートメントに指定されるときだけ有効になります。
セキュリティ
アクセス許可
プロシージャに対する ALTER PROCEDURE 権限が必要です。
ストアド プロシージャを変更する方法
次のいずれかを使用します。
SQL Server Management Studio を使用する
Management Studio でプロシージャを変更するには
オブジェクト エクスプローラーで、 データベース エンジン のインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開し、 [プログラミング] を展開します。
[ストアド プロシージャ] を展開し、変更するプロシージャを右クリックして、 [変更] をクリックします。
ストアド プロシージャのテキストを変更します。
構文をテストするには、 [クエリ] メニューの [解析] をクリックします。
変更をプロシージャの定義に保存するには、 [クエリ] メニューの [実行] をクリックします。
更新されたプロシージャ定義を Transact-SQL スクリプトとして保存するには、[ ファイル ] メニューの [ 名前を付けて保存] をクリックします。 ファイル名をそのまま使用するか、または別の名前を入力し、 [保存] をクリックします。
重要
すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。
Transact-SQL の使用
クエリ エディターでプロシージャを変更するには
オブジェクト エクスプローラーで、 データベース エンジン のインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開します。 または、ツール バーの利用可能なデータベースの一覧からデータベースを選択します。 この例では AdventureWorks2012 データベースを選択します。
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、
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
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、
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