我们的表架构与我们的视图架构不同步存在问题。我想知道如何有一个存储过程(对于Sql Server)获取数据库中的所有视图,并通过select *
执行每个视图这是我想象的(伪):
声明x
设置x =从sysobjects中选择对象,其中object = view
x中的foreach视图 sp_execute'select * from view'
然后我们可以进行自动测试,每晚调用它。 SqlException表示某些内容不同步。
答案 0 :(得分:4)
应该在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
答案 1 :(得分:2)
答案 2 :(得分:0)
在SQL 2008中,您可以使用以下方法检测未解析的依赖项,而无需从视图中实际选择。
SELECT *
FROM sys.views v
JOIN sys.sql_expression_dependencies e ON e.referencing_id = v.object_id
and referenced_id is null