2016-04-29 59 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' 
; 

您需要创建一个控制表,将表映射到视图。你也需要安排这个过程。