2016-04-29 62 views
1

我知道sql server不會選擇底層表的模式更改。例如,如果我們執行以下的,自動選取模式更改底層表的視圖

CREATE TABLE tbl (id INT) 

CREATE VIEW viewa 
AS 
SELECT * 
FROM tbl 

ALTER TABLE tbl ADD NAME INT 

並執行視圖中選擇,只有ID列返回

SELECT * 
FROM viewa 

有沒有我可以設置通過SQL引擎autopicks架構的任何財產改變

回答

2

使用sp_refreshview爲此,

exec sp_refreshview N'dbo.viewa' 
+0

「dbo.tbl」是表名。你應該指定視圖名稱代替表名稱 –

+0

thankx @AksheyBhat,已修改。 –

+0

謝謝阿卜杜勒。但是,是否有任何服務器級屬性可以設置爲自動選擇那些即使我們忘記執行proc?就像我用tbl中的select *創建了視圖。即使我不運行任何特效,我需要通過設置一些屬性,如'set nocount ON'等等來查看所有列。 – sree

0

您可以創建v用「SCHEMABINDING」選項瀏覽。這種方式的基表定義不能以影響視圖定義的方式修改。

CREATE VIEW viewa 
AS 
SELECT * 
FROM tbl SCHEMABINDING 
+0

謝謝Akshey。但是,要求是我可以更新表,但所有依賴於select *的應該自動選擇新列 – sree

1

這裏沒有開箱即用的功能。但你可以推出自己的。 system tables詳細列出了當前附加到每個視圖和表的所有列。

-- Returns every column for the given table/view. 
SELECT 
    c.* 
FROM 
    sys.objects AS o 
     INNER JOIN sys.schemas AS s  ON s.schema_id = o.schema_id 
     INNER JOIN sys.columns AS c  ON c.object_id = o.object_id 
WHERE 
    s.name = 'MySchema' 
    AND o.name = 'MyTable' 
; 

您需要創建一個控制表,將表映射到視圖。你也需要安排這個過程。