Search code examples
sql-servert-sqlviewalter

T-SQL: ALTER VIEW error within a transaction and try-catch block


I am using SQL Server 2005 and SQL Server 2005 Management Studio Express. I have a script with below scheme:

USE [MyDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

BEGIN TRANSACTION;
GO

BEGIN TRY
    ALTER VIEW dbo.MyView
    AS
    SELECT ...
    GO
    ALTER TABLE ...
    GO
    UPDATE dbo.MyTable ...
    GO
    INSERT INTO dbo.AnotherTable ...
    GO
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
GO

The problem is that I am receiving the error in the ALTER VIEW dbo.MyView block: "Incorrect syntax near reserved word 'VIEW'."


Solution

  • This didn't give me any syntax error, try this. I just removed "Go" at the end of dynamic sql.

    USE [MyDatabase]
    go
    SET ANSI_NULLS ON
    go
    SET QUOTED_IDENTIFIER ON
    go
    BEGIN TRANSACTION
    go
    BEGIN TRY
    EXEC sp_executesql N'ALTER VIEW dbo.MyView
    AS
    SELECT * FROM ....; '
    EXEC sp_executesql N'ALTER TABLE ...;'
    EXEC sp_executesql N'UPDATE ....;'
    END TRY
    BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;
    
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
    END CATCH;
    IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
    GO