修改存储过程 - SQL Server

修改存储过程 - SQL Server

适用于:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系统(PDW)Microsoft Fabric中的SQL数据库

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中修改存储过程。

Limitations

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

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

Permissions

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

使用 SQL Server Management Studio

若要在 Management Studio 中修改过程:

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

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

展开“存储过程”,右键单击要修改的过程,再选择“修改”。

修改存储过程的文本。

若要测试语法,请在“查询”菜单上选择“分析”。

若要将修改项保存到过程定义中,请在“查询”菜单上选择“执行”。

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

Important

验证所有用户的输入。 验证前请勿连接用户输入。 绝对不要执行根据尚未验证的用户输入构造的命令。 未经评估的用户输入会使数据库容易受到称为“SQL 注入攻击”的一种攻击。 有关详细信息,请参阅 SQL 注入。

使用 Transact-SQL

若要使用 T-SQL 命令修改过程:

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

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

在“文件”菜单上,选择“新建查询”。

复制以下示例并将其粘贴到查询编辑器中。 该示例创建 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

在“文件”菜单上,选择“新建查询”。

复制以下示例并将其粘贴到查询编辑器中。 该示例修改 uspVendorAllInfo 过程。 这会删除 EXECUTE AS CALLER 子句,并且将过程的主体修改为只返回提供指定产品的供应商。

LEFT 和 CASE 函数自定义结果集的外观。

Important

删除再重新创建现有存储过程是,会删除已显式授予该存储过程的权限。 改用 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

若要将修改项保存到过程定义中,请在“查询”菜单上选择“执行”。

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

若要运行修改的存储过程,请执行以下示例。

EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';

GO

相关内容

ALTER PROCEDURE (Transact-SQL)

SQL 注入

相关文章