Как выполнить все представления в базе данных через хранимую процедуру - PullRequest
3 голосов
/ 20 августа 2010

У нас есть проблема с нашей схемой таблицы, не синхронизированной с нашей схемой представления.Я хотел бы знать, как я мог бы иметь хранимую процедуру (для Sql Server), которая получает все представления в базе данных и выполняет каждое из них с помощью select *

Вот что я представил (псевдо):


Объявить x
Установить x = Выбрать объект из системных объектов, где object = view

foreach view в x
sp_execute 'select * from view'


Тогда мы могли бы провести автоматический тест, который вызывал бы это каждую ночь.SqlException означало бы, что что-то не синхронизировано.

Ответы [ 3 ]

4 голосов
/ 20 августа 2010

должно работать в 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

Я в основном сосредоточился на одной части вашего вопроса, см. Также как убедиться, что представление будет иметь базовые изменения таблицы, используя sp_refreshview

2 голосов
/ 20 августа 2010

Я бы действительно посоветовал вам использовать С РАЗМЕРОМ , чтобы предотвратить это.

Или используйте sp_refreshview как минимум в цикле.

SELECT * FROM view не надежен: как узнать, правильный ли вывод или нет?

0 голосов
/ 20 августа 2010

В SQL 2008 вы можете использовать следующее для обнаружения неразрешенных зависимостей без необходимости фактически выбирать из представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...