Azure Synapse专用SQL池中有sp_refreshview的等效功能吗?
Azure Synapse 专用SQL池视图元数据刷新替代方案
Azure Synapse 专用SQL池未原生支持sp_refreshview系统存储过程,当视图依赖的底层表结构发生变更后,视图元数据不会自动同步更新。除手动执行ALTER VIEW重写视图定义外,还有以下两种可实现同类功能的方案:
方案1:使用
sp_refreshsqlmodule系统存储过程
这是最接近sp_refreshview能力的官方支持替代方案,用于刷新当前数据库中未开启架构绑定的视图、存储过程、触发器、用户自定义函数等对象的元数据,无需重写完整视图定义即可完成元数据更新。
单视图刷新用法:EXEC sp_refreshsqlmodule N'[SchemaName].[ViewName]';
注意:如果视图已开启SCHEMABINDING配置,需要先取消架构绑定后再执行该存储过程,否则会触发报错。方案2:通过系统视图生成批量ALTER脚本
如需批量刷新多个视图,可通过查询系统元数据自动生成所有目标视图的ALTER语句,无需手动逐个编写视图定义。
生成脚本的参考代码:SELECT 'ALTER VIEW ' + QUOTENAME(s.name) + '.' + QUOTENAME(v.name) + ' AS ' + sm.definition FROM sys.views v INNER JOIN sys.sql_modules sm ON v.object_id = sm.object_id INNER JOIN sys.schemas s ON v.schema_id = s.schema_id -- 可添加WHERE条件过滤需要刷新的视图 -- WHERE v.name IN ('View1', 'View2')执行上述查询后,直接复制返回的结果语句批量运行,即可完成对应视图的元数据刷新。
提示:如果底层表做了删除列、修改列数据类型等破坏性变更,需先确认视图定义中未引用已失效的列,否则任意刷新方案都会执行失败。
内容的提问来源于stack exchange,提问作者Arulmouzhi
相关产品推荐
相关产品推荐

