Sql server 2008 TRY/CATCH中包含DROP约束的语法错误
我有以下T-SQL:Sql server 2008 TRY/CATCH中包含DROP约束的语法错误,sql-server-2008,tsql,Sql Server 2008,Tsql,我有以下T-SQL: USE [MYDB] GO SET XACT_ABORT, NOCOUNT ON GO BEGIN TRANSACTION; BEGIN TRY ALTER TABLE [dbo].[ContactRole] DROP CONSTRAINT [FK_8bff7074914bc29885004c0a323] GO END TRY BEGIN CATCH SELECT ERROR_NUMBER() A
USE [MYDB]
GO
SET XACT_ABORT, NOCOUNT ON
GO
BEGIN TRANSACTION;
BEGIN TRY
ALTER TABLE [dbo].[ContactRole]
DROP CONSTRAINT [FK_8bff7074914bc29885004c0a323]
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;
这在分析时给了我这个错误:
味精102,第15级,状态1,第9行“FK8BUFF7074914BC29885004C0A323”附近的语法不正确
单独或仅在事务中时,没有解析错误。将
转到更改表后。。。下拉约束..
行
....
BEGIN TRANSACTION;
BEGIN TRY
ALTER TABLE [dbo].[ContactRole]
DROP CONSTRAINT [FK_8bff7074914bc29885004c0a323]
COMMIT TRANSACTION;
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
GO
不是SQL关键字-它仅被SQL Server Management Studio理解为“批处理分隔符”
另外:将您的COMMIT TRANSACTION
语句放在ALTER TABLE
命令的后面-毕竟,如果出现问题,代码执行将立即跳入catch块,因此,该行仅在一切正常时执行您不应该使用
Go,因为它指示批处理的结束,并且您的提交应该在alter表之后
此外,也不需要检查事务是否在catch上运行,因为在这种情况下,它将始终具有
USE [MYDB]
GO
SET XACT_ABORT, NOCOUNT ON
GO
BEGIN TRANSACTION;
BEGIN TRY
ALTER TABLE [dbo].[ContactRole]
DROP CONSTRAINT [FK_8bff7074914bc29885004c0a323]
COMMIT TRANSACTION;
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;
ROLLBACK TRANSACTION;
END CATCH