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 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 に答える
0

if 条件の後に create/alter プロシージャ ステートメントを配置できないため、最初のステートメントでエラーが発生しています。これを試して

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 に答える
-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 に答える