select a_table.fname,a_table.lname,a_view.tell
from a_table
if exists(select 1 from sys.views where name='a_view' and type='v')
{
inner join a_view on a_table.id=a_view.id
}
我的问题:
如果我之前创建了视图,则将内部与视图一起加入我的表 如果a_view存在,则显示a_view.tell,因为a_view在a_view中! 如果我不存在a_view时选择a_view.tell,则不正确
答案 0 :(得分:1)
为此可以使用动态sql。
DECLARE @DynSql VARCHAR(max);
SET @DynSql = 'select fname, lname from a_table';
IF OBJECT_ID('a_view', 'v') IS NOT NULL
BEGIN
SET @DynSql = 'select
t.fname, t.lname, v.tell
from a_table t
join a_view v on v.id = t.id';
END
EXEC (@DynSql);
答案 1 :(得分:1)
这个评论太长了。
创建视图!不要以表或视图是否存在为条件来查询。
数据库应该具有结构,几乎没有理由没有所需的表和视图。
因此,在到达需要此查询的位置之前,请确保该视图存在。我不确定这在您的环境中需要什么,但可能包括: