SQL-即使出现错误,仍继续运行所有SQL语句
我有一些这样的疑问SQL-即使出现错误,仍继续运行所有SQL语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一些这样的疑问 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 CO
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语句中,可能会弹出一条消息,因为表2中没有名为R1的字段
需要
我需要一种方法,以便即使在收到错误后,也能执行所有语句
我的方法
我试图单独执行这些语句,以接收每行的错误消息,但这花费了太多时间,因为它与通过internet连接到PC的服务器进行了7次连接。所以,我使用了所有这些查询来获取一个连接中的记录,但它在第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);
您应该在指令之间使用“GO”,以便在出现错误时继续执行:
Alter Table Table1 ALTER COLUMN T1 varchar(MAX);
GO
Alter Table Table1 ALTER COLUMN T2 varchar(MAX);
GO
Alter Table Table1 ALTER COLUMN T3 varchar(MAX);
GO
Alter Table Table2 ALTER COLUMN R1 varchar(MAX);
GO
Alter Table Table2 ALTER COLUMN T1 varchar(MAX);
GO
Alter Table Table2 ALTER COLUMN T2 varchar(MAX);
GO
Alter Table Table2 ALTER COLUMN T3 varchar(MAX);
GO
这会给你所有的信息,并会一个接一个地执行所有的句子。这些是我在类似情况下的日志。正如您将看到的,会通知各种错误,而不仅仅是一个:
注意:捕获行为取决于错误的严重程度,这
MSDOC的链接解释了try_catch的工作原理
希望有帮助:)如果Table2没有列R1,那么语句“alterTable2 alterColumnR1 varchar(MAX);”将不是有效的sql语句,因此该语句将不会尝试运行,因此不会发生捕获。相反,如果您执行该语句,它将尝试运行,捕获将起作用
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
execute ('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);
我注意到,如果这些命令是在一个打开的会话中运行的,那么我们可以获得所需的行为
mysql-u root-p myDB
>>在出现第一个错误时停止
mysql -u root -p myDB
(after login)
source commands.sql
^^^即使在出现错误后仍将继续尝试此操作,但不起作用。错误消息保留在那里,而不打印消息“错误更改表2的R1列”@FelixPamittan我尝试创建一个没有表的新数据库,并使用了一个try-catch,但它不会打印错误消息,而是打印系统默认值message@DeveloperNation未捕获错误,因为错误的严重性必须低于catch块应处理的严重性。也指Sabbegh Houssem在其answernice技巧中提到的。非常适合我的情况(很多表更改。对于我来说,try-catch没有任何意义。我只需要一种“请继续执行,不管有什么错误”,这是完美的