2016-04-29 1 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

ありがとうAbdul。しかし、サーバーレベルのプロパティは、procを実行するのを忘れても自動的に選択するように設定できますか?私はselect * from tblのビューを作成したようなものです。すべてのprocsを実行しなくても、 'set nocount ON'などのプロパティを設定してすべての列を表示する必要があります – sree

0

を変えるあなたはVを作成することができます「SCHEMABINDING」オプションで表示してください。このようにして、ビュー定義に影響を与えるような方法でベーステーブルの定義を変更することはできません。

CREATE VIEW viewa 
AS 
SELECT * 
FROM tbl SCHEMABINDING 
+0

Thanks 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' 
; 

テーブルをビューにマップするコントロールテーブルを作成する必要があります。また、プロセスをスケジュールする必要があります。

関連する問題