我有这样的问题
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行中断了命令。
任何建议或一段代码表示赞赏
使用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);
这取决于错误的严重程度,来自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
走 .....
希望能帮助到你 :)