当我在IF语句中使用它时,为什么CREATE PROCEDURE语句失败?
问题描述:
我想,如果它的存在是为了删除存储过程,然后通过这样的方式来创建它:当我在IF语句中使用它时,为什么CREATE PROCEDURE语句失败?
IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL
DROP PROCEDURE dbo.myStoredProc
CREATE PROCEDURE [dbo].[myStoredProc]
(
@parameter1 BIT
) AS
IF @parameter1 = 1
BEGIN
....
但抱怨说:
“CREATE PROCEDURE必须是唯一的声明批次“
问题:我该如何解决我的脚本来解决这个问题?
答
您需要在第一个逻辑批次的末尾放置一个go
。
IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL
DROP PROCEDURE dbo.myStoredProc
go -- you need to add the batch-terminator 'go'
CREATE PROCEDURE [dbo].[myStoredProc]
(
@parameter1 BIT
) AS
IF @parameter1 = 1
BEGIN
..
答
GO您IF
语句后添加表明,这是你的第一个查询批处理的结束。
更多在这里阅读:
http://msdn.microsoft.com/en-us/library/ms188037.aspx
IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL
DROP PROCEDURE dbo.myStoredProc
GO
这将防止您的错误发生。
工作!但为什么终止是必要的?我的意思是 – pencilCake 2012-02-07 16:33:13
@pencilCake背后的逻辑因为“CREATE PROCEDURE”语句必须是批处理中的第一条语句(且只有一条)。 – 2012-02-07 16:37:53
我想知道为什么MS创建了这个规则......反对什么? – pencilCake 2012-02-07 16:38:50