bob*_*bbo 4 .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]
Run Code Online (Sandbox Code Playgroud)
BEGIN/END不是存储过程的限制.批次结束(GO通常)是.
所以,是的,代码被执行了.
这也意味着BEGIN/END是不必要的......就像参数周围的括号一样.这是SQL:不是高级客户端语言.
我经常在存储过程中留下GRANT EXECUTE ... :)