SQL Server存储过程的基本指南

目录

  • SQL Server存储过程的基本指南
  • 简介
  • 创建一个简单的存储过程
  • 执行存储过程
  • 修改存储过程
  • 删除存储过程

简介

SQL Server存储过程将一个或多个T-SQL语句分为逻辑单元。存储过程存储在SQL Server数据库服务器中。

当第一次调用存储过程时,SQL Server会创建一个执行计划并将其存储在缓存中。在存储过程的后续执行中,SQL Server重用该计划,以快速可靠的性能执行存储过程。

创建一个简单的存储过程

以下SELECT语句从自行车商店数据库的products(产品)表中返回产品列表:

SELECT 
	product_name, 
	list_price
FROM 
	production.products
ORDER BY 
	product_name;

使用CREATE PROCEDURE语句创建一个包装上述SQL语句的存储过程:

CREATE PROCEDURE uspProductList
AS
BEGIN
    SELECT 
        product_name, 
        list_price
    FROM 
        production.products
    ORDER BY 
        product_name;
END;

其中:
uspProductList是存储过程名字,AS关键字分隔存储过程的头部和主体部分。

如果存储过程只有一条语句,则该语句的开始的BEGIN和结尾的END关键字是可选的。
然而,通常都会写上,这样代码更清晰。

CREATE PROCEDURE可以缩写成CREATE PROC

要编译此存储过程,可以在SQL Server Management Studio中将其作为普通SQL语句执行,如下图所示:

sql server 存储过程权限 sql server存储过程在哪_SQL Server高级

执行成功:

Commands completed successfully.

这说明存储过程已成功编译并保存到数据库目录中。

可以在Programmability>Stored Procedures(可编程性>存储过程)下找到存储过程:

sql server 存储过程权限 sql server存储过程在哪_存储过程_02

执行存储过程

EXECUTE sp_name;
--或者
EXEC sp_name

其中sp_name是存储过程名。

比如要执行存储过程uspProductList:

EXEC uspProductList;

存储过程输出:

sql server 存储过程权限 sql server存储过程在哪_数据库_03

修改存储过程

可以使用ALTER PROCEDURE语句

首先,右键单击存储过程名称并选择修改菜单项,打开存储过程以查看其内容:

sql server 存储过程权限 sql server存储过程在哪_数据库_04

其次,通过按价格而不是产品名称对产品进行排序来更改存储过程中的查询语句:

ALTER PROCEDURE uspProductList
    AS
    BEGIN
        SELECT 
            product_name, 
            list_price
        FROM 
            production.products
        ORDER BY 
            list_price 
    END;

然后点击执行按钮执行:

Commands completed successfully.

现在,再次执行存储过程,将看到更改生效:

EXEC uspProductList;

sql server 存储过程权限 sql server存储过程在哪_sql server 存储过程权限_05

删除存储过程

DROP PROCEDURE sp_name;
--或者
DROP PROC sp_name;    
--比如删除uspProductList
DROP PROCEDURE uspProductList;