ストアド プロシージャの変更
このトピックでは、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 スクリプトとして保存するには、[ File ] メニューの [名前を付けて保存 ] をクリック。 ファイル名をそのまま使用するか、または別の名前を入力し、 [保存]をクリックします。
重要
すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。
Transact-SQL の使用
クエリ エディターでプロシージャを変更するには
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[データベース]を展開し、プロシージャが属するデータベースを展開します。 または、ツール バーの利用可能なデータベースの一覧からデータベースを選択します。 この例では、 AdventureWorks2012 データベースを選択します。
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーし、クエリ エディターに貼り付けます。 この例では、Adventure Works Cycles データベース内のすべてのベンダーの名前、ベンダーが提供する製品、信用格付け、および現時点で製品を提供可能かどうかを返す
uspVendorAllInfo
プロシージャを作成します。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 スクリプトとして保存するには、[ File ] メニューの [名前を付けて保存 ] をクリック。 ファイル名をそのまま使用するか、または別の名前を入力し、 [保存]をクリックします。
変更したストアド プロシージャを実行するには、次の例を実行します。
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO