是否在执行存储过程中的END之后的语句?

时间:2011-07-22 10:58:27

标签: .net sql sql-server-2005 sql-server-2008

存储过程中END之后的语句是否已执行?

我发现我的存储过程包括BEGIN / END块之后的丢弃过程。但是,每次我在代码中的其他位置执行存储过程时,它似乎工作正常 pvd_sp_yyy不会丢弃。我不知道为什么?我首先担心这个问题,所以无论如何我都会删除附加声明。

有没有人对此有任何想法?

由于

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[pvd_xxx]
    @var
AS

BEGIN

    DECLARE @RETURN int

    SET @RETURN = 0

    IF EXISTS (
        SELECT * FROM table1
        WHERE name = @var
    )
    BEGIN
        SET @RETURN = 1
    END

    RETURN @RETURN

END


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pvd_sp_yyy]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [pvd_sp_yyy]

3 个答案:

答案 0 :(得分:7)

BEGIN / END不是存储过程的限制。批次结束(GO通常)是。

所以,是的,代码被执行。

这也意味着BEGIN / END是不必要的......就像参数周围的括号一样。这是SQL:不是高级客户语言。

我经常在存储过程中留下GRANT EXECUTE ...:)

答案 1 :(得分:2)

是的,因为您声明的只是一个代码块。在您执行批处理之前,程序内容不会结束。

答案 2 :(得分:0)

如果您确实希望执行DROP PROCEDURE,那么它必须是批处理中的唯一语句,因此请将ALTER PROCEDUREDROP PROCEDUREGO分开。