我們的表模式與視圖模式不同步時出現問題。我想知道我怎麼能有一個存儲過程(對於SQL Server)是獲取數據庫中的所有意見,並執行通過每一個選擇*如何通過存儲過程執行數據庫中的所有視圖
這是我想象的(僞):
從系統對象
x聲明
集X =選擇對象,其中以x
sp_execute對象=視圖
的foreach視圖
'從視圖中選擇*' 0然後,我們可以進行自動測試,每天晚上都會調用它。一個SqlException將表明某些內容不同步。
我們的表模式與視圖模式不同步時出現問題。我想知道我怎麼能有一個存儲過程(對於SQL Server)是獲取數據庫中的所有意見,並執行通過每一個選擇*如何通過存儲過程執行數據庫中的所有視圖
這是我想象的(僞):
x聲明
集X =選擇對象,其中以x
sp_execute對象=視圖
的foreach視圖
'從視圖中選擇*' 0然後,我們可以進行自動測試,每天晚上都會調用它。一個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
在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
創建帶有1個字段的表,爲選擇該字段創建視圖,在表中重命名字段,執行您的查詢,獲得空結果集 - 不知道這是應該做什麼... 接受的解決方案給我我尋找的異常。 – PAR 2010-08-20 18:46:30
@PAR - 是的,這將會丟失表格。只是看看是否可以調整掉落的列。在任何情況下'sp_refreshview'都會得到那些無需選擇所有內容的人 – 2010-08-20 18:48:22
你有什麼版本的SQL Server? – 2010-08-20 18:28:38
當前正在運行2008 R2 – PAR 2010-08-20 18:34:00
請問您有什麼特別的情況發生嗎?大多數情況是列名正在更改或者列正在被刪除,或者SELECT *沒有選擇新列或者什麼?請問這些意見的目的是什麼?他們只是作爲一個權限/抽象層,還是做額外的連接和其他業務對象組裝? – ErikE 2010-08-21 03:49:30