首页 > 解决方案 > ALTER PROCEDURE 有什么用途?

问题描述

我是数据库新手。请你给我解释一下这首曲子的台词好吗?或者给我一个链接到一些有助于我理解这段代码的文档。我只知道代码正在修改存储过程:

ALTER PROCEDURE [dbo].[sp_SetRequestStatus] 
    @requestId int,
    @status int,
    @statusnote nvarchar(max) = '',
    @Result nvarchar(2000) OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    UPDATE t_Request 
        SET StatusId = @status, 
        UpdatedStatusTime = GETDATE(), 
        StatusNote = @statusnote, 
        UpdatedDate = GETDATE() 
        WHERE Id = @requestId
    SET @Result = 'Success'
END

标签: sqlsql-server

解决方案


好的。我将冒着对这个房间有点迂腐的风险,详细介绍所有内容,这绝对是矫枉过正。这是第一部分:

ALTER PROCEDURE [dbo].[sp_SetRequestStatus] 
    @requestId int,
    @status int,
    @statusnote nvarchar(max) = '',
    @Result nvarchar(2000) OUTPUT 
AS

这是存储过程的声明。它使用ALTER PROCEDUREwhich 假定该过程已经存在于数据库中。存储过程大致相当于返回 void 的 C 函数。还有更多,但这是基本部分。

这个过程有四个参数。前两个是类型int(四字节有符号整数)。 nvarchar(max) =''是 Unicode 中的可变长度字符串,最大长度为 2Gbytes,默认值为空字符串,与NULL. 这种区别非常重要,您应该进一步研究。

最后一个参数@Result nvarchar(2000) OUTPUT是一个带有最大长度为 2000 个字符的 Unicode 字符集的输出变量。

继续前进,SET NOCOUNT ON;关闭后面的行数UPDATE。通常,出于性能和其他原因,将其设置为关闭不是一个好主意。它应该设置为开。

现在到UPDATE

    UPDATE t_Request 
        SET StatusId = @status, 
        UpdatedStatusTime = GETDATE(), 
        StatusNote = @statusnote, 
        UpdatedDate = GETDATE() 
        WHERE Id = @requestId

这是更新表 t_Request。它使用传入的参数@status 设置列StatusID,使用参数@statusnote 设置StatusNote,使用当前时间(GETDATE())设置UpdateStatusTime,同样使用UpdatedDate 上的日期。最后 UPDATE 仅限于那些行Id = @requestId

该过程所做的最后一件事是将“成功”分配给@Result. 在脚本中调用此过程时,您作为第四个参数传入的任何变量现在都将包含“成功”。

就像我说的那样,这太过分了,而且太详细了,但是你去吧。


推荐阅读