分享方式:


修改預存程序

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

本文說明如何使用 SQL Server Management Studio 或 Transact-SQL 刪除 SQL Server 中的預存程序。

限制

Transact-SQL 預存程序無法修改成 CLR 預存程序,反之亦然。

如果先前的程序定義是利用 WITH ENCRYPTIONWITH RECOMPILE 來建立的,則只有在 ALTER PROCEDURE 陳述式包括這些選項時,才會啟用這些選項。

權限

需要程序的 ALTER PROCEDURE 權限。

使用 SQL Server Management Studio

使用 SQL Server Management Studio 修改程序:

  1. 在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。

  2. 依序展開 [資料庫] 、程序所屬的資料庫,以及 [可程式性]

  3. 展開 [預存程序],以滑鼠右鍵按一下要修改的程序,然後選取 [修改]。

  4. 修改預存程序的文字。

  5. 若要測試此語法,請在 [查詢] 功能表中選取 [剖析]。

  6. 若要將所做的修改儲存至程序定義,請在 [查詢] 功能表中選取 [執行]。

  7. 若要將更新的程序定義儲存為 Transact-SQL 指令碼,請在 [檔案] 功能表中選取 [另存新檔]。 接受檔案名稱或更換為新名稱,然後選取 [儲存]。

重要

驗證所有使用者輸入。 在使用者輸入完成驗證前,請勿加以串連。 請勿執行由未經驗證之使用者輸入所建構的命令。 未經驗證的使用者輸入可讓您的資料庫容易受到稱為 SQL 插入式攻擊的惡意探索類型攻擊。 如需詳細資訊,請參閱 SQL 插入

使用 Transact-SQL

使用 T-SQL 命令修改程序:

  1. 在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。

  2. 展開 [資料庫] ,展開程序所屬的資料庫。 或者,從工具列的可用資料庫清單中選取資料庫。 針對此範例,請選取 AdventureWorks2022 資料庫。

  3. 在 [檔案] 功能表中,選取 [新增查詢]。

  4. 將下列範例複製並貼入查詢編輯器中。 此範例會建立 Purchasing.uspVendorAllInfo 程序,傳回 Adventure Works Cycles 資料庫中的所有供應商名稱,以及所提供之產品、信用評等與服務時間。

    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 子句並修改程序主體,使其只傳回提供指定產品的供應商。 LEFTCASE 函數可自訂結果集的外觀。

    重要

    卸載並重新建立現有的預存程式,會移除已明確授與預存程式的權限。 使用 ALTER 來修改現有的預存程序。

    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