1

我试过这个:

if object_id('a_proc22') is not null
CREATE PROCEDURE a_proc22 AS SELECT 1
go

但它给了我一个语法错误。

但这似乎编译:

if object_id('a_proc22') is not null
EXEC('CREATE PROCEDURE a_proc22 AS SELECT 1')
go

为什么第一个不正确?

4

5 回答 5

3

我猜这个错误类似于“CREATE/ALTER PROCEDURE 必须是查询中的第一条语句”,所以,这意味着它CREATE PROCEDURE必须是查询中的第一条语句。如果你把它包装在一个 上EXEC,那么当它执行时,它就是那个查询的第一条语句,所以这就是它起作用的原因。

于 2012-07-25T13:27:15.203 回答
2
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[a_proc22]')
           AND TYPE IN (N'P', N'PC'))
DROP PROCEDURE [dbo].[a_proc22];
GO

CREATE PROCEDURE [dbo].[a_proc22]
AS
BEGIN 

-- Code here

END
GO
于 2014-03-22T10:22:38.033 回答
0

您的第一条语句给出错误,因为在 if 条件之后您不能放置创建/更改过程语句。试试这个

if Exists(select * from sys.procedures  -- if exists then drop it
    where name = 'a_proc22')
    Drop procedure a_proc22
    GO
    CREATE PROCEDURE a_proc22 -- create the new procedure
    AS
    SELECT 1
    go
于 2012-07-25T13:39:38.027 回答
0
if object_id('a_proc22') is not null
drop procedure a_proc22 
go
create procedure a_proc22 
AS 
SELECT 1 

GO 是下降后的重要内容,您不能先创建,我想出于安全目的进行一些 SQL 验证。

于 2012-07-25T15:07:47.970 回答
-1
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[a_proc22]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[a_proc22]
--and create here... Or you can remove the drop and create with if not exists
GO
于 2012-07-25T13:24:44.217 回答