首页 > 解决方案 > 如何执行 EXEC sp_* 命令列表并继续处理任何错误

问题描述

在 SQL Server Management Studio 中,是否可以执行EXEC命令列表并让它继续出现任何错误?

我知道这似乎违反直觉。但是我们使用生成的脚本将列的元数据添加为扩展属性,此元数据用于应用程序表单。

请参见下面的示例,实际上它有数百行这样的行。

EXEC sp_addextendedproperty 'VarLabel', 'Patient ID', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', ID
EXEC sp_addextendedproperty 'VarLabel', 'Patient name', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', PATNAME
EXEC sp_addextendedproperty 'VarLabel', 'Sex', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', SEX
EXEC sp_addextendedproperty 'ValLabel001', '1 = Male', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', SEX
EXEC sp_addextendedproperty 'ValLabel002', '2 = Female', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', SEX
-- etc. hundreds of lines

添加新列时,我过去只运行整个脚本,这会产生很多property already exists错误,但仍会添加新列的扩展属性。而现在,如果第一行的扩展属性已经存在,那么它只会给出一个错误并立即在该行停止并且不会继续。

运行它非常实用,与现在相比,我必须从这个大脚本中手动挑选新列的元数据并只运行那些行,特别是因为有很多列。

我知道我可以对其进行文本编辑并添加GO一行,然后它就可以工作了,就像这样:

EXEC sp_addextendedproperty 'VarLabel', 'Patient ID', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', ID
GO
EXEC sp_addextendedproperty 'VarLabel', 'Patient name', N'USER', DBO, N'VIEW', VW_DEMO, N'COLUMN', PATNAME
GO

但这需要一些额外的步骤,我很肯定我曾经能够按原样运行它。我使用 SQL Management Studio v17.5,这可能是 v16 之后删除的功能还是什么?我查看了工具 > 选项菜单和编辑器设置,但我找不到任何设置。

标签: sql-server

解决方案


拉努说过的话。只需将每个语句包装在一个TRY...CATCH块中。

我不记得您是否可以将CATCH块留空,如果不能 - 也许只需添加一个PRINT命令,写入执行失败的日志。


推荐阅读