SQL Server 存储过程(Stored Procedure)介绍与用法

低代码平台 WorkFine 支持存储过程,使低代码应用能够调用数据库逻辑,从而实现更复杂的功能。

一、什么是存储过程?

存储过程(Stored Procedure) 是一组预编译的 SQL 语句,以一个名称存储在数据库中,用户可以通过指定该名称并传入参数(如果有的话)来执行它。

优点:

  • 性能高:首次执行时编译并缓存执行计划,后续调用更快。
  • 可重用:一次编写,多次调用。
  • 安全性好:可以限制用户直接访问表,只允许通过存储过程操作数据。
  • 模块化:便于维护和管理复杂业务逻辑。

二、存储过程的基本语法

1. 创建存储过程

CREATE PROCEDURE 存储过程名称
    [@参数名 数据类型 [= 默认值]] [OUTPUT],
    ...
AS
BEGIN
    -- SQL 语句
END

2. 执行存储过程

EXEC 存储过程名称 [参数值]
-- 或
EXECUTE 存储过程名称 [参数值]

3. 修改存储过程

ALTER PROCEDURE 存储过程名称
    ...
AS
BEGIN
    -- 修改后的 SQL 语句
END

4. 删除存储过程

DROP PROCEDURE 存储过程名称

5. 查看存储过程定义

sp_helptext '存储过程名称'

三、常用示例(使用中文字段)

假设有一张员工表 员工信息表,包含以下字段:

  • 员工编号(INT)
  • 姓名(NVARCHAR(50))
  • 部门(NVARCHAR(50))
  • 工资(DECIMAL(10,2))

示例 1:创建一个查询所有员工的存储过程

CREATE PROCEDURE 查询所有员工
AS
BEGIN
    SELECT 员工编号, 姓名, 部门, 工资
    FROM 员工信息表
END

调用:

EXEC 查询所有员工

示例 2:带输入参数的存储过程(根据部门查询员工)

CREATE PROCEDURE 根据部门查询员工
    @部门名称 NVARCHAR(50)
AS
BEGIN
    SELECT 员工编号, 姓名, 部门, 工资
    FROM 员工信息表
    WHERE 部门 = @部门名称
END

调用:

EXEC 根据部门查询员工 @部门名称 = N'技术部'

示例 3:带输出参数的存储过程(返回某部门的平均工资)

CREATE PROCEDURE 获取部门平均工资
    @部门名称 NVARCHAR(50),
    @平均工资 DECIMAL(10,2) OUTPUT
AS
BEGIN
    SELECT @平均工资 = AVG(工资)
    FROM 员工信息表
    WHERE 部门 = @部门名称
END

调用:

DECLARE @结果 DECIMAL(10,2)
EXEC 获取部门平均工资 @部门名称 = N'销售部', @平均工资 = @结果 OUTPUT
SELECT @结果 AS '销售部平均工资'

示例 4:带默认参数的存储过程

CREATE PROCEDURE 查询员工工资范围
    @最低工资 DECIMAL(10,2) = 5000.00,
    @最高工资 DECIMAL(10,2) = 20000.00
AS
BEGIN
    SELECT 员工编号, 姓名, 部门, 工资
    FROM 员工信息表
    WHERE 工资 BETWEEN @最低工资 AND @最高工资
END

调用(使用默认值):

EXEC 查询员工工资范围

调用(自定义范围):

EXEC 查询员工工资范围 @最低工资 = 8000, @最高工资 = 15000

示例 5:修改数据的存储过程(插入新员工)

CREATE PROCEDURE 添加新员工
    @姓名 NVARCHAR(50),
    @部门 NVARCHAR(50),
    @工资 DECIMAL(10,2)
AS
BEGIN
    INSERT INTO 员工信息表 (姓名, 部门, 工资)
    VALUES (@姓名, @部门, @工资)
END

调用:

EXEC 添加新员工 @姓名 = N'张三', @部门 = N'人事部', @工资 = 9500.00

四、注意事项

  1. 中文对象名需注意:虽然 SQL Server 支持中文命名(如表名、字段名、存储过程名),但建议在生产环境中使用英文命名,避免兼容性或脚本迁移问题。
  2. 参数前加 @:SQL Server 中所有变量和参数都必须以 @ 开头。
  3. 事务处理:对于涉及多条 DML 操作的存储过程,建议使用 BEGIN TRANSACTION / COMMIT / ROLLBACK 来保证数据一致性。
  4. 错误处理:可使用 TRY...CATCH 结构捕获异常。

五、小结

功能语法关键词
创建CREATE PROCEDURE
修改ALTER PROCEDURE
删除DROP PROCEDURE
执行EXECEXECUTE
输出参数OUTPUT
查看定义sp_helptext

应用实践

存储过程测试方法:将语句单独拿出

相关文章

© 版权声明
THE END
喜欢就点赞吧
点赞12 分享