更新sql视图时出现问题

时间:2011-07-08 11:27:34

标签: sql sql-server sql-view

我遇到了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

它返回视图A

中的原始IdC列名称

我尝试了sp_refreshview,但这没有帮助。

如何从视图A中获取视图B以返回更新的列名?

更新**

好吧,我搞砸了原来的问题。我感谢大家的回应。我打算在视图B中将视图A加到表B.看来视图B上的alter语句解决了这个问题。

4 个答案:

答案 0 :(得分:4)

正如我可以看到您查询的那样,您指的是表而不是视图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

答案 1 :(得分:3)

您的观点是加入表格,而不是观看A,请尝试:

inner join A a on a.Id = b.Id

答案 2 :(得分:2)

这是select *

的问题

如果你引用了View 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和存储过程中也会发生同样的事情。

答案 3 :(得分: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