修改預存程序
本主題描述如何使用 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