如何使UNION视图同步显示源视图新增字段?
解决UNION视图不显示新增字段的问题
这是因为SQL Server中,用SELECT *定义的视图,它的字段元数据是在创建或修改视图时固定下来的。哪怕后续源视图(CD_qryFacetsMatch和CD_qryNonFacetsMatch)添加了新字段,联合视图CD_qryAllMatch的元数据不会自动同步,单纯刷新文件夹也没用。
你可以用以下几种方法解决:
重新执行ALTER VIEW语句
直接重新运行你现有的视图修改脚本,SQL Server会重新解析SELECT *,获取源视图的最新字段结构。执行代码如下:ALTER VIEW [dbo].[CD_qryAllMatch] AS Select * from [dbo].[CD_qryFacetsMatch] UNION Select * from [dbo].[CD_qryNonFacetsMatch]使用系统存储过程刷新元数据
执行sp_refreshview存储过程,强制刷新视图的元数据,无需修改视图定义:EXEC sp_refreshview N'dbo.CD_qryAllMatch';改用显式字段列表(推荐最佳实践)
避免使用SELECT *,而是显式写出所有需要的字段。这样后续源视图新增字段时,只要在联合视图的字段列表中添加对应字段即可,还能避免因字段顺序不一致导致的UNION错误。示例:ALTER VIEW [dbo].[CD_qryAllMatch] AS Select Field1, Field2, NewAddedField, ... -- 替换为实际字段名 from [dbo].[CD_qryFacetsMatch] UNION Select Field1, Field2, NewAddedField, ... -- 与上面字段顺序、类型一致 from [dbo].[CD_qryNonFacetsMatch]
内容的提问来源于stack exchange,提问作者Johnny Bones
相关产品推荐
相关产品推荐

