SQL:如果视图存在,则内部联接


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,这是不正确的

可以使用动态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);

这对于注释来说太长了。

创建视图!不要以表或视图是否存在为条件进行查询。

数据库应该有一个结构,几乎没有理由不拥有所需的表和视图。

因此,在到达需要该查询的位置之前,请确保该视图存在。我不确定这在您的环境中需要什么,但可能包括:

  • 使用正确的权限创建视图,这样就不会意外删除它
  • 安排一个作业,检查以确保视图存在和/或定期更新视图
  • 在脚本的前面创建应该使用的视图

最新更新