怎么批量执行SQL脚本,遇到错误不中断

sxq129601 2021-05-07 06:22:22
参考脚本:
execute sp_addextendedproperty 'MS_Description','XXXX','user','dbo','table','TB1',null,null;
execute sp_addextendedproperty 'MS_Description','XXXX2','user','dbo','table','TB2',null,null;

在SSMS中执行的时候如果第1个报错了,第2个不会执行被中断了

只有这种才可以
execute sp_addextendedproperty 'MS_Description','XXXX','user','dbo','table','TB1',null,null;
GO
execute sp_addextendedproperty 'MS_Description','XXXX2','user','dbo','table','TB2',null,null;

但是我的语句都是SQL拼接出来的,没法出现换行的GO


,改成
execute sp_addextendedproperty 'MS_Description','XXXX','user','dbo','table','TB1',null,null;GO
execute sp_addextendedproperty 'MS_Description','XXXX2','user','dbo','table','TB2',null,null;GO
消息 102,级别 15,状态 1,第 1 行
“GO”附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
“GO”附近有语法错误。
...全文
390 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨夹雪 2021-05-08
  • 打赏
  • 举报
回复
的确不行 DECLARE @sql VARCHAR(max)='' SELECT @sql=@sql+'begin try execute sp_addextendedproperty ''MS_Description'',''XXXX'',''user'',''dbo'',''table'','''+name+''',null,null end try begin catch print ERROR_MESSAGE() end catch;'+CHAR(10) FROM sys.objects WHERE type='U' PRINT @sql EXEC (@sql) 那用二楼说的,你拼的时候,把每句sql 都用begin try 包起来
sxq129601 2021-05-08
  • 打赏
  • 举报
回复
引用 4 楼 雨夹雪 的回复:

DECLARE @sql VARCHAR(max)=''
SELECT @sql=@sql+'execute sp_addextendedproperty ''MS_Description'',''XXXX'',''user'',''dbo'',''table'','''+name+''',null,null;'+CHAR(10)+'go'+CHAR(10)  FROM  sys.objects WHERE  type='U'
PRINT @sql
你在拼SQL字符串的时候,加个 CHAR(10)+'go'+CHAR(10),这样,每句sql后面都有个go了
不行的,你可以自己试试
雨夹雪 2021-05-08
  • 打赏
  • 举报
回复

DECLARE @sql VARCHAR(max)=''
SELECT @sql=@sql+'execute sp_addextendedproperty ''MS_Description'',''XXXX'',''user'',''dbo'',''table'','''+name+''',null,null;'+CHAR(10)+'go'+CHAR(10)  FROM  sys.objects WHERE  type='U'
PRINT @sql
你在拼SQL字符串的时候,加个 CHAR(10)+'go'+CHAR(10),这样,每句sql后面都有个go了
吉普赛的歌 版主 2021-05-08
  • 打赏
  • 举报
回复
引用 2 楼 RINK_1 的回复:
用;(分号)呢


DECLARE @SQL VARCHAR(1000)

SET @SQL='execute sp_addextendedproperty ''MS_Description'', 
   ''接收时间'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''RecieveTime'';
execute sp_addextendedproperty ''MS_Description'', 
   ''接收时间'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''RecieveTime'';
  execute sp_addextendedproperty ''MS_Description'', 
   ''主键'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''id'''


exec(@SQL)
只有一个错误提示,应该是不行。
RINK_1 2021-05-07
  • 打赏
  • 举报
回复
用;(分号)呢


DECLARE @SQL VARCHAR(1000)

SET @SQL='execute sp_addextendedproperty ''MS_Description'', 
   ''接收时间'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''RecieveTime'';
execute sp_addextendedproperty ''MS_Description'', 
   ''接收时间'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''RecieveTime'';
  execute sp_addextendedproperty ''MS_Description'', 
   ''主键'',
  ''user'', ''dbo'', ''table'', ''BS_Track_Info'', ''column'', ''id'''


exec(@SQL)
吉普赛的歌 版主 2021-05-07
  • 打赏
  • 举报
回复
加上 try catch 就可以了:
--1.
BEGIN TRY
	execute sp_addextendedproperty 'MS_Description','XXXX','user','dbo','table','TB1',null,null;
END TRY
BEGIN CATCH
	SELECT ERROR_MESSAGE() AS ErrorMessage
END CATCH
--2.
BEGIN TRY
	execute sp_addextendedproperty 'MS_Description','XXXX2','user','dbo','table','TB2',null,null;
END TRY
BEGIN CATCH
	SELECT ERROR_MESSAGE() AS ErrorMessage
END CATCH

34,836

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧