sql - 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
解决方案
好的。我将冒着对这个房间有点迂腐的风险,详细介绍所有内容,这绝对是矫枉过正。这是第一部分:
ALTER PROCEDURE [dbo].[sp_SetRequestStatus]
@requestId int,
@status int,
@statusnote nvarchar(max) = '',
@Result nvarchar(2000) OUTPUT
AS
这是存储过程的声明。它使用ALTER PROCEDURE
which 假定该过程已经存在于数据库中。存储过程大致相当于返回 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
. 在脚本中调用此过程时,您作为第四个参数传入的任何变量现在都将包含“成功”。
就像我说的那样,这太过分了,而且太详细了,但是你去吧。
推荐阅读
- ruby - 无法弄清楚 Kitchen/Chef 的 JSON 环境的完整路径
- ajax - 在 React 中为更新的组件执行 API 请求的正确方法是什么?
- c# - C# WebApi 如何从 HttpPostedFile 获取完整的图像
- python - 在 Python 中将 JSON 转储字符串转换为浮点数
- php - 自定义输出 wp 列表类别
- ios - 实例成员 ...不能用于 ViewController 类型
- javascript - 仅显示 [object object],不使用子路径显示来自 api 端点的数据
- r - 为什么 R 中的 coalesce() 会为我返回额外的值?
- c# - 将 Icon 对象与 byte[] 相互转换会导致质量损失
- c# - 发布 ASP.NET Core MVC 2.1 项目时将文件 (geckodriver.exe) 复制到发布文件夹