【发布时间】:2011-10-10 23:11:58
【问题描述】:
存储过程中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]
【问题讨论】:
-
我不想包含 drop 过程语句。这是一个错误,所以我将其删除。 1.我想澄清一下它是否会被执行。其他人似乎表明它可能? 2. 另外,为了防止我犯同样的错误,我应该总是在 END 后面加上一个 GO 吗?
-
我很感兴趣 - 你有没有发现为什么第二个 proc 没有被丢弃? (按照您的代码编写方式,
IF EXISTS ... DROP ...代码肯定会在每次执行时被调用...)
标签: .net sql sql-server-2005 sql-server-2008