1。在创建视图前请考虑如下准则:
- 只能在当前数据库中创建视图。但是,如果使用分布式查询定义视图,则新视图所引用的表和视图可以存在于其他数据库甚至其他服务器中。
- 视图名称必须遵循标识符的规则,且对每个架构都必须唯一。此外,该名称不得与该架构包含的任何表的名称相同。
- 您可以对其他视图创建视图。Microsoft SQL Server 2005 允许嵌套视图。但嵌套不得超过 32 层。根据视图的复杂性及可用内存,视图嵌套的实际限制可能低于该值。
- 不能将规则或 DEFAULT 定义与视图相关联。
- 不能将 AFTER 触发器与视图相关联,只有 INSTEAD OF 触发器可以与之相关联。
- 定义视图的查询不能包含 COMPUTE 子句、COMPUTE BY 子句或 INTO 关键字。
- 定义视图的查询不能包含 ORDER BY 子句,除非在 SELECT 语句的选择列表中还有一个 TOP 子句。
- 定义视图的查询不能包含指定查询提示的 OPTION 子句。
- 定义视图的查询不能包含 TABLESAMPLE 子句。
- 不能为视图定义全文索引定义。
- 不能创建临时视图,也不能对临时表创建视图。
- 不能删除参与到使用 SCHEMABINDING 子句创建的视图中的视图、表或函数,除非该视图已被删除或更改而不再具有架构绑定。另外,如果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响该视图的定义,则这些语句将会失败。
- 尽管查询引用一个已配置全文索引的表时,视图定义可以包含全文查询,仍然不能对视图执行全文查询。
2.创建视图
(1)简单的
CREATE view v_search_contact
as
select distinct contact_id from contact where is_noncriminal=1
select * from v_search_contact--查询一个视图,他和普通的没有区别
也是用alter修改一个视图
(2)相对复杂的
alter view v_search_contact
as
select distinct a.contact_id from contact a
where a.is_noncriminal=1
union all
select distinct n.case_id from case_info n
where n.pdc is not null
union all ----注意这里是加起来,因此一定要select 这三个表有相同的列
select e.establishment_id from establishment e join case_establishment ce on e.establishment_id=ce.establishment_id
where ce.addby =1
每一个select 查询出来是一个相对独立的slq语句
创建view的时候要特别留意sql语句的效率。
浙公网安备 33010602011771号