我们的表架构与视图架构不同步时出现问题。我想知道我如何拥有一个存储过程(用于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