ストアドプロシージャ内のENDの後のステートメントは実行されていますか?ストアドプロシージャの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]
私はドロッププロシージャー・ステートメントを含めるにはしたくありません。これは間違いですので、私はそれを削除します。私はそれが全く実行されるかどうかを明確にしたいと思います。他はそれを示すかもしれないと思われる?? 2.また、同じミスをしないように、ENDの後に必ずGOを入れるべきですか? – bobbo
私は興味をそそられています - なぜ2番目のprocが落とされていないのか分かりましたか? (あなたのコードが書かれている方法、 'IF EXISTS ... DROP ...'コードはすべての実行時に必ず呼び出されます...) – Tao