Jon*_*der 6 sql-server stored-procedures
这些答案(1,2),使用代码这篇文章中,建议使用的语句SET NOCOUNT ON作为临时占位符/假体的尸体将很快覆盖的存储过程.
这些答案和那篇文章都没有说明为什么 SET NOCOUNT ON被选为临时存储过程体的值.
我的问题:为什么SET NOCOUNT ON一个临时存储过程体的好选择(如果一切顺利)将在后续操作中被覆盖?还有更好的选择吗?
可能构成一个好的临时/占位符存储过程体的一些标准:
ALTER,存储过程的后续操作没有按计划发生,则在运行时以明显的方式失败;为了更好地满足我的问题中的“标准”,我着手替换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 ...
Run Code Online (Sandbox Code Playgroud)
因此,如果ALTER PROCEDURE以某种方式无法运行,那么如果我的存储过程被执行,它将引发错误,而不是无声地执行任何操作(仅由组成的主体就是这种情况SET NOCOUNT ON)。
感谢这种方法:http : //www.codeofhonor.com/blog/a-better-way-to-update-sql-stored-procedures