sql - SET 附近的语法不正确。期待外部

标签 sql sql-server stored-procedures

我正在尝试检查存储过程是否存在,如果不存在,则创建它。

我收到错误

Incorrect Syntax Near SET. Expecting EXTERNAL



代码:
IF (NOT EXISTS (SELECT * 
             FROM INFORMATION_SCHEMA.ROUTINES 
             WHERE ROUTINE_SCHEMA = 'dbo' 
             AND  ROUTINE_NAME = 'ELMAH_GetErrorXml'))
BEGIN
    CREATE PROCEDURE [dbo].[ELMAH_GetErrorXml]
    (
        @Application NVARCHAR(60),
        @ErrorId UNIQUEIDENTIFIER
    )
    AS

        SET NOCOUNT ON

        SELECT 
            [AllXml]
        FROM 
            [ELMAH_Error]
        WHERE
            [ErrorId] = @ErrorId
        AND
            [Application] = @Application
END

最佳答案

您收到该错误,因为这不是检查对象(过程)是否存在的权利,如果不存在则创建它。尝试这样的事情。

IF NOT EXISTS (SELECT *
               FROM   sys.objects
               WHERE  object_id = Object_id(N'[dbo].[ELMAH_GetErrorXml]')
                      AND type IN ( N'P', N'PC' ))
  BEGIN
      EXEC('CREATE PROCEDURE [dbo].[Elmah_geterrorxml] (@Application NVARCHAR(60),
                                                        @ErrorId     UNIQUEIDENTIFIER)
            AS
              BEGIN
                  SET NOCOUNT ON

                  SELECT [AllXml]
                  FROM   [ELMAH_Error]
                  WHERE  [ErrorId] = @ErrorId
                         AND [Application] = @Application
              END')
  END

但简单的方法是
IF EXISTS (SELECT *
           FROM   INFORMATION_SCHEMA.ROUTINES
           WHERE  ROUTINE_SCHEMA = 'dbo'
                  AND ROUTINE_NAME = 'ELMAH_GetErrorXml')
  BEGIN
      DROP PROCEDURE [dbo].[Elmah_geterrorxml]
  END

GO

CREATE PROCEDURE [dbo].[Elmah_geterrorxml] (@Application NVARCHAR(60),
                                            @ErrorId     UNIQUEIDENTIFIER)
AS
  BEGIN
      SET NOCOUNT ON

      SELECT [AllXml]
      FROM   [ELMAH_Error]
      WHERE  [ErrorId] = @ErrorId
             AND [Application] = @Application
  END 

关于sql - SET 附近的语法不正确。期待外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869531/

相关文章:

sql - PostgreSQL - 使用 select 语句更新表

MySQL:为什么 NULL 在 MySQL 中被忽略?

sql-server - 使用 TQuery.Locate() 函数查找其他匹配项

entity-framework - 导入存储过程后无法编译项目

sql-server - sql server 删除速度因索引而大幅减慢

php - 存储过程与 mysql 一起工作,但 php 出现错误

php - 字符显示正常,然后插入 mysql 时带有问号

mysql - 按组计算 SQL 中的百分比

sql - 如何拥有引用另一个表的检查约束?

用于识别配对项的 SQL 查询(具有挑战性)