ストアド プロシージャの変更
このトピックでは、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 でプロシージャを変更するには
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開し、[プログラミング] を展開します。
[ストアド プロシージャ] を展開し、変更するプロシージャを右クリックして、[変更] をクリックします。
ストアド プロシージャのテキストを変更します。
構文をテストするには、[クエリ] メニューの [解析] をクリックします。
変更をプロシージャの定義に保存するには、[クエリ] メニューの [実行] をクリックします。
更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] をクリックします。 ファイル名をそのまま使用するか、または別の名前を入力し、[保存] をクリックします。
セキュリティに関する注意 |
---|
すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。 |
Transact-SQL の使用
クエリ エディターでプロシージャを変更するには
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[データベース] を展開し、プロシージャが属するデータベースを展開します。 または、ツール バーの利用可能なデータベースの一覧からデータベースを選択します。 この例では AdventureWorks2012 データベースを選択します。
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、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
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、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
変更をプロシージャの定義に保存するには、[クエリ] メニューの [実行] をクリックします。
更新されたプロシージャの定義を Transact-SQL スクリプトとして保存するには、[ファイル] メニューの [名前を付けて保存] をクリックします。 ファイル名をそのまま使用するか、または別の名前を入力し、[保存] をクリックします。
変更したストアド プロシージャを実行するには、次の例を実行します。
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO
[先頭に戻る]