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

时间:2016-10-07 07:15:07

标签: sql sql-server tsql sql-server-2012

我正在使用SQL Server 2012。

如果发生错误,如何继续查询执行?如果在以下示例中,第二个查询失败,则休息查询无法执行。

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)

如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

或者,如果您不想记录任何内容,可以使用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

答案 1 :(得分:0)

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

通过这种方式,您可以记录失败,并且没有完全没有按预期执行。

请参阅下面的链接以了解try catch语法。

https://msdn.microsoft.com/en-us/library/ms175976.aspx

答案 2 :(得分:0)

试试这个:

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 :(得分:0)

   -- 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