T-SQL-继续对错误执行查询

T-SQL-继续对错误执行查询,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我正在使用SQL Server 2012 如果发生任何错误,如何继续执行查询?如果在下面的示例中,第二次查询失败,则rest查询不会执行 INSERT Schema1.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2) INSERT Schema2.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2) INSERT Schema3.[M

我正在使用SQL Server 2012

如果发生任何错误,如何继续执行查询?如果在下面的示例中,第二次查询失败,则rest查询不会执行

INSERT Schema1.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
INSERT Schema2.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
INSERT Schema3.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
INSERT Schema4.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)

如何解决这个问题?

您可以将每条语句包装在try..catch块中

这样,您就可以记录故障,并且不会出现任何未按预期执行的情况

有关try-catch语法,请参见下面的链接


或者,如果您不想记录任何内容,可以使用GO将查询分开

INSERT Schema1.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
GO
INSERT Schema2.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
GO
INSERT Schema3.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
GO
INSERT Schema4.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
GO
试试这个:

begin try 
    INSERT Schema1.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
end try
begin catch
     -- what you want to do in catch
end catch    

begin try 
    INSERT Schema2.[Menu] ([CompanyId], [Menu], [Role]) VALUES (5, N'Transaction', 2)
end try
begin catch
      -- what you want to do in catch
end catch    

and so on...

把每一个插针都放进一个试扣?没错。我不想记录任何东西。我将尝试此操作。导致3个未处理的错误。即使您不想记录任何内容,也要尝试..catch将捕获错误,因此,尽管处理得很松散。他/她只想继续查询,其他什么都不想。如果我删除catch语句并保留仅try,它会工作吗?不。如果开始尝试,则必须使用catch。捕获可能为空。如果只有一个插入失败,则将撤消成功的插入。我看不出与OP原始代码的区别您的原始代码如果失败,其他人可以执行如果没有失败。而我的代码如果只有一个或多个失败,所有都是失败的…如果一个或多个失败,您的代码将导致所有插入回滚。这正是OP不想要的
   -- maybe like this :)
    -- using tran catch

    BEGIN TRY
    BEGIN TRAN
     INSERT Schema1.[Menu] ([CompanyId], [Menu], [Role]) 
     VALUES (5,   N'Transaction', 2)
     INSERT Schema2.[Menu] ([CompanyId], [Menu], [Role])
    VALUES (5, N'Transaction', 2)
    INSERT Schema3.[Menu] ([CompanyId], [Menu], [Role]) 
    VALUES (5, N'Transaction', 2)
   INSERT Schema4.[Menu] ([CompanyId], [Menu], [Role]) 
   VALUES (5, N'Transaction', 2)
   COMMIT TRAN
  END TRY
   BEGIN CATCH
   ROLLBACK TRAN
  END CATCH