You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:39:02