首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL:更改事务中的视图错误并尝试捕获块

T-SQL:更改事务中的视图错误并尝试捕获块
EN

Stack Overflow用户
提问于 2015-03-18 00:09:42
回答 1查看 2.4K关注 0票数 2

我正在使用Server 2005和SQLServer2005ManagementStudioExpress。我有一个脚本和下面的方案:

代码语言:javascript
复制
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

问题是,我收到了ALTER dbo.MyView块中的错误:“保留字‘VIEW’附近的不正确语法。”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 00:54:33

这没有给我任何语法错误,试试这个。我刚刚删除了动态sql末尾的"Go“。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29111987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档