4

SQLビューに問題があります。私の実際の見解にはいくつかの結合が含まれていますが、私の質問の目的のために、より小さな例で問題を示します。

私が意見を持っていると言ってください…</p>

create view A
as
    select Id as IdC
    from tableA
go

create view B
as
    select b.Id, 
            b.Name, 
            a.*
    from tableB b 
    inner join A a on a.Id = b.Id
go

だから、すべてが順調です。次に、ビューAを変更して読み取ります…</ p>

alter view A
as
    select Id as IdColumn
    from tableA
go

だから今私が書くなら…</p>

select * from A

列を返しますIdColumn

しかし、私が書くと…</ p>

select * from B

IdCビューAから元の列名を返します

私は試しsp_refreshviewましたが、それは役に立ちませんでした。

ビューBにビューAから更新された列名を返すようにするにはどうすればよいですか?

アップデート **

さて、私は元の質問を台無しにしました。皆様のご回答に感謝いたします。ビューAをビューBのテーブルBに結合するつもりです。ビューBのalterステートメントで問題が解決したようです。

4

4 に答える 4

4

私はあなたがクエリを参照しているのを見ることができるので、ビューAではなくテーブルAを参照しています

select b.Id, 
            b.Name, 
            a.*
    from tableB b 
    inner join tableA a on a.Id = b.Id

したがって、上記のクエリを変更すると、問題が解決します

ビューBの変更されたクエリ

 select b.Id, 
                b.Name, 
                a.*
        from tableB b 
        inner join A a on a.IdColumn = b.Id
于 2011-07-08T11:31:27.550 に答える
3

ビューBはビューAではなくテーブルAに参加しています。次のことを試してください。

inner join A a on a.Id = b.Id
于 2011-07-08T11:31:05.157 に答える
2

それが問題ですselect *

ビュー A を参照した場合

create view B 
as
     select b.Id,
              b.Name,
              a.*
     from tableB b
     inner join A  on a.Id = b.Id 

ビュー A を変更すると、返された列 (追加、削除、名前変更) は、ビュー B を変更するまでビュー B に反映されません。UDFとストアド プロシージャでも同じことが起こります。

于 2011-07-08T11:52:33.610 に答える
1

ビューBはビューAとは何の関係もありません。

ビューBには、TableAとTableBがあります

代わりに試してください:

alter view B
as
    select b.Id, 
            b.Name, 
            a.*
    from tableB b 
    inner join A a on a.IdColumn = b.Id
go
于 2011-07-08T11:31:51.613 に答える