ALTER PROCEDURE用途说明及示例存储过程代码解读咨询
一、ALTER PROCEDURE 具体用途
ALTER PROCEDURE 是T-SQL(SQL Server 专用的SQL语法)中用于修改已存在存储过程的命令,对比「删除原有存储过程再新建」的方式,它可以保留存储过程原有的权限配置,不用重新赋权,适合调整存储过程的参数、执行逻辑等场景。
二、代码逐行解释
ALTER PROCEDURE [dbo].[sp_SetRequestStatus]
- 声明要修改的是
dbo架构下名为sp_SetRequestStatus的存储过程,[]是转义符,用于规避名称和系统关键字冲突的问题。
@requestId int, @status int, @statusnote nvarchar(max) = '', @Result nvarchar(2000) OUTPUT
- 定义存储过程的入参和出参:
@requestId int:输入参数,整型,接收要修改的请求的唯一ID@status int:输入参数,整型,接收要设置的请求状态值@statusnote nvarchar(max) = '':输入参数,支持超长Unicode文本,默认值为空字符串,调用时可以不传该参数,不传就自动用空字符串@Result nvarchar(2000) OUTPUT:输出参数,最长支持2000位Unicode字符串,用于返回存储过程的执行结果给调用方
AS
- 标记参数定义部分结束,后续内容为存储过程的实际执行逻辑。
BEGIN
- 存储过程逻辑块的开始标记,和最后的
END配对,包裹所有执行代码。
-- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements.
- 注释内容,说明下方
SET NOCOUNT ON命令的作用。
SET NOCOUNT ON;
- 关闭SQL执行后默认返回的「影响行数」提示,避免这个额外的返回结果干扰调用方接收存储过程返回的其他数据。
UPDATE t_Request SET StatusId = @status, UpdatedStatusTime = GETDATE(), StatusNote = @statusnote, UpdatedDate = GETDATE() WHERE Id = @requestId
- 核心更新逻辑:
- 对
t_Request表执行更新操作 - 将符合条件的行的
StatusId字段设为传入的@status参数值 - 将
UpdatedStatusTime(状态更新时间)和UpdatedDate(数据更新时间)都设为当前数据库服务器时间,GETDATE()是T-SQL内置的获取当前时间的函数 - 将
StatusNote(状态备注)字段设为传入的@statusnote参数值 - 筛选条件为只更新
Id等于传入@requestId的单条数据,避免误改全表数据
- 对
SET @Result = 'Success'
- 给输出参数
@Result赋值为Success,告知调用方本次执行成功。
END
- 存储过程逻辑块的结束标记。
三、调用示例(方便理解)
你可以用以下方式调用这个存储过程:
-- 先声明变量接收输出结果 DECLARE @ExecRes nvarchar(2000); -- 执行存储过程,传入要修改的请求ID和状态 EXEC [dbo].[sp_SetRequestStatus] @requestId=1001, @status=3, @Result=@ExecRes OUTPUT; -- 查看执行结果 SELECT @ExecRes;
内容的提问来源于stack exchange,提问作者lilouzi
相关产品推荐
相关产品推荐

