我遇到了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语句解决了这个问题。
答案 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