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

它从视图 A 返回原始IdC列名

我试过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

您的 viewB 正在加入 tableA,而不是视图 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 

在您更改视图B 之前,更改视图 A 返回的列(添加、删除、重命名)不会反映在视图 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 回答