我们的表架构与视图架构不同步时出现问题。我想知道我如何拥有一个存储过程(用于Sql Server),该存储过程获取数据库中的所有视图,并通过select *执行每个视图

这是我想象的(伪):



宣告x
设置x =从sysobjects中选择对象,其中object = view

x中的foreach视图
sp_execute'从视图中选择*'



然后,我们可以进行一个自动测试,每晚进行一次测试。 SqlException将指示某些内容不同步。

最佳答案

应该在2000年及以后开始工作

select quotename(table_schema) +'.' + quotename(table_name) as ViewNAme,
 identity(int,1,1) as ID
  into #test
  from information_schema.tables
 where table_type = 'view'


declare @Loopid int,@MaxID int


select @LoopID =1,@MaxID =MAX(id)
from #test

declare @ViewName varchar(100)

while @LoopID <= @MaxID
begin

select @ViewName = ViewNAme
from #test
where id = @LoopID

exec ('select top 1 * from ' + @ViewName)
set @LoopID = @LoopID + 1
end

drop table #test


我主要关注您问题的一部分,另请参见how to make sure that the view will have the underlying table changes by using sp_refreshview

08-06 22:26