gpt4 book ai didi

sql-server - "SET NOCOUNT ON"对于占位符存储过程体来说是一个不错的选择吗?

转载 作者:行者123 更新时间:2023-12-02 18:16:35 27 4
gpt4 key购买 nike

这些答案( 12 ),使用 this article 中的代码,建议使用语句 SET NOCOUNT ON 作为存储过程的临时占位符/虚拟主体,该存储过程的主体很快就会被覆盖。

这些答案和该文章都没有具体说明为什么选择SET NOCOUNT ON作为临时存储过程主体的值。

我的问题:为什么 SET NOCOUNT ON 对于临时存储过程体来说是一个不错的选择,该过程体(如果一切顺利)将在后续操作中被覆盖?有更好的选择吗?

关于什么可能构成良好的临时/占位符存储过程主体的一些标准:

  • 如果由于某种原因存储过程的后续 ALTER 未按计划发生,则在运行时会以明显的方式失败;
  • 维护存储过程的 future 开发人员很容易理解;
  • 不会增加任何显着的开销。

最佳答案

为了更好地满足我的问题中的“标准”,我决定将 SET NOCOUNT ON 替换为 RAISERROR声明。

在运行 ALTER PROCEDURE 之前确保存储过程存在的代码最终看起来像:

-- Create the sproc with a temporary body if it doesn't exist yet. 
-- We'll set the real body in the ALTER PROCEDURE statement below.
IF NOT EXISTS (
SELECT * FROM sys.objects
WHERE name = 'MyStoredProcedureNameHere'
AND type = 'P'
) BEGIN
EXEC ('CREATE PROCEDURE MyStoredProcedureNameHere AS
RAISERROR (''The ALTER PROCEDURE to set the body for MyStoredProcedureNameHere did not run as it should have!'', 16, 1);');
END
GO

ALTER PROCEDURE MyStoredProcedureNameHere AS ...

因此,如果 ALTER PROCEDURE 不知何故无法运行,那么如果我的存储过程被执行,它会引发错误,而不是默默地不执行任何操作(就像仅由 SET NOCOUNT 组成的主体的情况一样)开)。

此方法的功劳:http://www.codeofhonor.com/blog/a-better-way-to-update-sql-stored-procedures

关于sql-server - "SET NOCOUNT ON"对于占位符存储过程体来说是一个不错的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40849374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com