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);
这对于注释来说太长了。
创建视图!不要以表或视图是否存在为条件进行查询。
数据库应该有一个结构,几乎没有理由不拥有所需的表和视图。
因此,在到达需要该查询的位置之前,请确保该视图存在。我不确定这在您的环境中需要什么,但可能包括:
- 使用正确的权限创建视图,这样就不会意外删除它
- 安排一个作业,检查以确保视图存在和/或定期更新视图
- 在脚本的前面创建应该使用的视图