修改存储过程

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 修改 SQL Server 2014 中的存储过程。

开始之前

限制和局限

Transact-SQL 存储过程修改为 CLR 存储过程,反之亦然。

如果原来的过程定义是使用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的,那么只有在 ALTER PROCEDURE 语句中也包含这些选项时,这些选项才有效。

安全性

权限

要求对过程具有 ALTER PROCEDURE 权限。

修改存储过程

你可以使用以下项之一:

使用 SQL Server Management Studio

在 Management Studio 中修改过程

  1. 在对象资源管理器中,连接到 数据库引擎 的实例,然后展开该实例。

  2. 展开 “数据库” 、过程所属的数据库以及 “可编程性”

  3. 展开“存储过程”,右键单击要修改的过程,再单击“修改”

  4. 修改存储过程的文本。

  5. 若要测试语法,请在 “查询” 菜单上,单击 “分析”

  6. 若要将修改信息保存到过程定义中,请在 “查询” 菜单上单击 “执行”

  7. 若要将更新的过程定义另存为 Transact-SQL 脚本,请在 “文件 ”菜单上单击“ 另存为”。 接受该文件名或将其替换为新的名称,再单击 “保存”

重要

验证所有用户的输入。 验证前请勿连接用户输入。 绝对不要执行根据尚未验证的用户输入构造的命令。

“使用 Transact-SQL”

在查询编辑器中修改过程

  1. “对象资源管理器” 中,连接到 数据库引擎 的实例,然后展开该实例。

  2. 展开 “数据库” ,然后展开过程所属的数据库。 或者,在工具栏上,从可用数据库列表中选择该数据库。 对于此示例,请选择 AdventureWorks2012 数据库。

  3. 在“文件”菜单中,单击“新建查询”

  4. 复制以下示例并将其粘贴到查询编辑器中。 该示例创建 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  
    
    
  5. 在“文件”菜单中,单击“新建查询”

  6. 复制以下示例并将其粘贴到查询编辑器中。 该示例修改 uspVendorAllInfo 过程。 将删除 EXECUTE AS CALLER 子句并且将过程的主体修改为只返回那些提供指定产品的供应商。 LEFTCASE 函数自定义结果集的外观。

    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  
    
    

另请参阅

ALTER PROCEDURE (Transact-SQL)