【问题标题】:Syntax error in ALTER PROCEDURE in a DB update script数据库更新脚本中的 ALTER PROCEDURE 中的语法错误
【发布时间】:2010-07-05 08:02:17
【问题描述】:

我有一个脚本可以为我的网络应用程序的新版本更新我的数据库。在此更新中,我需要更改存储过程。我有一个 ALTER PROCEDURE 脚本,它在单独运行时工作正常,但是当我将它放入我的更新脚本并运行它时,我收到错误“关键字'PROCEDURE'附近的语法不正确”。和“必须声明标量变量“@age”。”我在这里做错了什么?脚本如下:

BEGIN TRY
BEGIN TRANSACTION

-- ==================================================================
--  v0.1 to v0.2
-- ==================================================================
IF EXISTS
(
    SELECT * FROM SystemParameters WHERE Name = 'Version' AND Value = '0.1'
)
BEGIN
    -- ==============================================================
    --  Changed Stored Procedures
    -- ==============================================================
    ALTER PROCEDURE ClearCache 
        @age int = 120
    AS
    BEGIN
        DECLARE @timestamp DATETIME
        SELECT @timestamp = DATEADD(MINUTE, -@age, GETDATE())

        --  Clear old searches

    END
    -- ==============================================================
    --  Update the Version Number
    -- ==============================================================
    UPDATE SystemParameters SET Value = '0.2' WHERE Name = 'Version'
END

COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION

--  Report the Error
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT 
    @ErrorMessage = ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

END CATCH

任何帮助将不胜感激:)

【问题讨论】:

    标签: sql sql-server stored-procedures syntax


    【解决方案1】:

    我怀疑你可以改变 IF 子句中的过程 尝试将其用作动态 SQL

    EXEC
    (
    'ALTER PROCEDURE ClearCache  
            @age int = 120 
        AS 
        BEGIN 
            DECLARE @timestamp DATETIME 
            SELECT @timestamp = DATEADD(MINUTE, -@age, GETDATE()) 
    
            --  Clear old searches 
    
        END 
    '
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多