sql-server - 如何执行 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 之后删除的功能还是什么?我查看了工具 > 选项菜单和编辑器设置,但我找不到任何设置。
解决方案
拉努说过的话。只需将每个语句包装在一个TRY...CATCH
块中。
我不记得您是否可以将CATCH
块留空,如果不能 - 也许只需添加一个PRINT
命令,写入执行失败的日志。
推荐阅读
- javascript - 随机对象内的 JavaScript 随机对象
- dependencies - Cloud Run 容器可能由于包问题而无法构建?
- mongodb - Mongodb更新管道更新嵌套数组中元素的字段
- javascript - 如何通过 Javascript 显示 chrome 的日期选择器
- javascript - WebGL 地球中的 CORS 问题
- aws-lambda - 获取 Amazon lex 的无效 Lambda 响应
- react-native - 带有打字稿的动画 API
- python - 在 python argparse 中使用正斜杠传递参数
- javascript - 如何使用 Userscript 阻止/隐藏除 recaptcha、hCaptcha、SloveMedia、2Captcha 等之外的 iframe
- c# - 防止 SqlBulkCopy 更改 XML 值