if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
BEGIN
CREATE PROCEDURE sp1....
END在查询分析器里执行这个的时候,说 PROCEDURE 附近有语法错误。为何?

解决方案 »

  1.   

    不能用begin。。end,你可以先删除,再创建
      

  2.   

    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'sp1') AND type in (N'P', N'PC'))
    DROP PROCEDURE sp1
    create PROCEDURE sp1....
      

  3.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
      drop procedure sp1
    goCREATE PROCEDURE sp1 
    as
        select 1 from syscolumns
    go drop procedure sp1
    go
      

  4.   

    if object_id('过程名') is null 
        create proc ...
      

  5.   


    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    drop  procedure [dbo].[sp1]
      

  6.   

    CREATE PROCEDURE ... 必须是一个批处理中的第一行语句,解决办法见楼上示例。
      

  7.   

      if   Exists(select   name   from   sysobjects   where   name   =   'ProcName'   and   type   =   'P')   
          Drop   Proc ProcName   
      

  8.   

    以下本人习惯的例子
    IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE ID = OBJECT_ID('P_BA_AutoInvCode') AND TYPE = 'P')
    BEGIN 
    DROP PROCEDURE P_BA_AutoInvCode
    END
    GO
    CREATE PROCEDURE P_BA_AutoInvCode(
    @as_PreFix NVARCHAR(32),
    @as_InvCode NVARCHAR(32) OUTPUT
    )
    AS
    /**********************************************************************************************************************
    DESC:自动产生存货编码
    AUTH:ROBI
    **********************************************************************************************************************/
    BEGIN
    ....
    END