SQL - 即使在出错之后仍继续运行所有SQL语句

问题描述 投票:4回答:2

我有这样的问题

Alter Table Table1 ALTER COLUMN T1 varchar(MAX);
Alter Table Table1 ALTER COLUMN T2 varchar(MAX);
Alter Table Table1 ALTER COLUMN T3 varchar(MAX);

--Table2 does not have a column "R1" and is likely to give error
Alter Table Table2 ALTER COLUMN R1 varchar(MAX);

Alter Table Table2 ALTER COLUMN T1 varchar(MAX);
Alter Table Table2 ALTER COLUMN T2 varchar(MAX);
Alter Table Table2 ALTER COLUMN T3 varchar(MAX);

可能的错误

现在在第4个语句中,可能会弹出一条消息,因为Table2中没有名为R1的字段。

需要

我需要一种方法,以便即使在收到错误后所有语句都会被执行。

我的方法

我试图单独执行这些语句以接收每一行的错误消息,但它花了太多时间,因为它连接到通过互联网连接到PC的服务器7次。所以,我一起使用所有这些查询来获取一个连接中的记录,但是由于该语句无效,它在第4行中断了命令。

任何建议或一段代码表示赞赏

sql sql-server sql-server-2008
2个回答
4
投票

使用try-catch块:

Alter Table Table1 ALTER COLUMN T1 varchar(MAX);
Alter Table Table1 ALTER COLUMN T2 varchar(MAX);
Alter Table Table1 ALTER COLUMN T3 varchar(MAX);

BEGIN TRY
     Alter Table Table2 ALTER COLUMN R1 varchar(MAX);
END TRY
BEGIN CATCH
     print 'error altering column R1 of Table2';
END CATCH;

Alter Table Table2 ALTER COLUMN T1 varchar(MAX);
Alter Table Table2 ALTER COLUMN T2 varchar(MAX);
Alter Table Table2 ALTER COLUMN T3 varchar(MAX);

0
投票

这取决于错误的严重程度,来自MSDOC的这个链接解释了try_catch如何工作https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017

要解决您的问题,您需要在指令之间添加“GO”:

指令1

指示2

走 .....

希望能帮助到你 :)