如何通过存储过程执行数据库中的所有视图

PAR*_*PAR 4 t-sql sql-server testing stored-procedures

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

这是我想象的(伪):


Declare x
Set x = Select object from sysobjects where object = view

x
sp_execute 'select * from view' 中的foreach 视图


然后我们可以进行自动化测试,每晚调用它。SqlException 将指示某些内容不同步。

SQL*_*ace 5

应该在 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
Run Code Online (Sandbox Code Playgroud)

我主要关注您问题的一部分,另请参阅如何使用 sp_refreshview 确保视图具有基础表更改