Проблема обновления представления SQL - PullRequest
4 голосов
/ 08 июля 2011

У меня проблема с просмотром SQL.Мои настоящие взгляды охватывают несколько объединений, но для целей моего вопроса я продемонстрирую проблему на более мелких примерах.

Скажем, у меня есть представления ...

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 следующим образом: *

alter view A
as
    select Id as IdColumn
    from tableA
go

Итак, если я напишу ...

select * from A

Возвращается столбец IdColumn

Однако, если я напишу ...

select * from B

Возвращает исходное имя столбца IdC из вида A

Я пытался sp_refreshview, но это не помогло.

Как получить представлениеB, чтобы вернуть обновленное имя столбца из представления A?

UPDATE **

Хорошо, я перепутал оригинальный вопрос.Я благодарю всех за их ответы.Я намерен соединить представление A с таблицей B в представлении B. Похоже, что оператор alter в представлении B решает проблему.

Ответы [ 4 ]

4 голосов
/ 08 июля 2011

Как я вижу, ваш запрос ссылается на таблицу, а не на представление 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
3 голосов
/ 08 июля 2011

Ваш viewB присоединяется к таблице A, а не к view A, попробуйте:

inner join A a on a.Id = b.Id
2 голосов
/ 08 июля 2011

Это проблема с select *

Если бы вы ссылались на представление A

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

Изменение представления Возвращенные столбцы (добавление, удаление, переименование) не будут отражены в представленииB, пока вы не измените представление B. То же самое происходит в UDF и хранимых процедурах.

1 голос
/ 08 июля 2011

View B не имеет ничего общего с View A.

В представлении B у вас есть таблица A и таблица B

Попробуйте вместо:

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