1112第十一章视图第十二章游标
第十一章 视图
视图最多可以包含1024 列,创建视图时SELECT 查询中不能包含 COMPUTE 子句,COMPUTE BY 子句或INTO 关键字;除非SELECT 中包含TOP 或 FOR XML 子句,否则不能使用 ORDER BY 子句;定义视图的查询不能包含指定查询提示的OPTION子句,也不能包含TABLESAMPLE 子句。
1.
索引视图(物化视图) 必须创建一个唯一聚集索引 P296
创建索引视图时,不能引用其它视图,只能引用基表,并且基表必须要与创建视图位于同一个数据库中,二者的所有者也要一样,创建该视图时必须指定 SCHEMABINDING ,还要求 ANSI_NULLS 和 QUOTED_IDENTIFER 连接选项应当为ON,为视图创建的第一个 所以in必须是唯一聚集索引,随后创建的索引可以是飞聚集索引,也不要求唯一。
CREATE VIEW vw_IndexDemo WITH SCHEMABINDING AS--必须加上架构绑定
SELECT a,b,c
FROM dbo.tab1
WHERE A BETWEEN 0 AND 100
CREATE UNIQUE CLUSTERED INDEX Index_vw ON vw_IndexDemo(a) --创建唯一聚集索引
b.为了防止 基表的修改影响到视图的结构,可以使用 SCHEMABINDING 子句将视图绑定到基础表的架构。指定了SCHEMABINDING 后,要对影响视图结构的基表列或其它对象进行修改时,必须首先修改或删除视图定义本身,接触这种依赖关系。使用SCHEMABINDING 时,查询语句必须使用两部分名称,所有引用的对象必须在同一个数据库内,并且不允许在 SELECT
列表中使用 *.
CREATE VIEW dbo.vwAvoidModi WITH SHEMABINDING --加上架构名,并带上 架构绑定。
AS
SELECT col1, col2, col3 FROM dbo.Tab ----不能用 * ,要加上 架构名
这之后,去修改 该视图的 基表时候,会报错误!可以有效防止基表被修改。
c. P 299 更新视图中的数据
重点: 通过视图去修改基表,如果 该视图是 多张基表关联生成,那么 更新的时候是通过 关联的 ON 后面的 那个 条件去到基表里找能匹配上的数据去更新,很可能因此而多更新了列,因为关联时候不止关联出一条数据的话。
更为严重的是,很可能会因为这样更新后而丢掉应有的行。 P301 -302 为了防止出现丢失行,确保
在数据经过修改后仍可通过视图看到数据,那么应在视图中使用 CHECK OPTION 选项,例子:
CREATE VIEW dbo.vcs
AS
SELECT C.ClassID, c.ClassName...
FROM dbo.Student AS S
ON c.ClassID = s.ClassID
WITH CHECK OPTION;
重命名:
sp_rename '','','';
第十二章 游标
Declare cursor 时候并不生成结果集,当执行 open cursor 时候才生成
@@FETCH_STATUS -- 0 有fetch 成功
-- 1 fetch 失败或者行不在结果集中
-- 2 表示提取的行不存在。
快速 只进游标,可滚动游标
FOR READ ONLY --- 只读游标
FOR UPDATE -- 可更新游标
SCROLL 或者 for update 时候就不能指定 Fast_forward 了
P306 FETCH 语句定位关键字
静态游标、动态游标、由键集驱动的游标
默认情况下 游标是 动态的,在滚动游标提取行时,游标能够反映结果集中所做的最新更改,
要建立一个静态游标, 可以在 游标名称后面添加 INSENSITIVE 关键字。然而,及时没有使用这个关键字,
当某个游标的 SELECT 语句有DISTINCT ,UNION,GROUP BY 或者 HAVING 关键字时候,处理游标的方式与指定INSENSITIVE 关键字一样,这时候结果集都是被聚合了。。。
P309 - 310 使用可更新游标进行数据更新。。。
第十一章 视图
视图最多可以包含1024 列,创建视图时SELECT 查询中不能包含 COMPUTE 子句,COMPUTE BY 子句或INTO 关键字;除非SELECT 中包含TOP 或 FOR XML 子句,否则不能使用 ORDER BY 子句;定义视图的查询不能包含指定查询提示的OPTION子句,也不能包含TABLESAMPLE 子句。
1.
索引视图(物化视图) 必须创建一个唯一聚集索引 P296
创建索引视图时,不能引用其它视图,只能引用基表,并且基表必须要与创建视图位于同一个数据库中,二者的所有者也要一样,创建该视图时必须指定 SCHEMABINDING ,还要求 ANSI_NULLS 和 QUOTED_IDENTIFER 连接选项应当为ON,为视图创建的第一个 所以in必须是唯一聚集索引,随后创建的索引可以是飞聚集索引,也不要求唯一。
CREATE VIEW vw_IndexDemo WITH SCHEMABINDING AS--必须加上架构绑定
SELECT a,b,c
FROM dbo.tab1
WHERE A BETWEEN 0 AND 100
CREATE UNIQUE CLUSTERED INDEX Index_vw ON vw_IndexDemo(a) --创建唯一聚集索引
b.为了防止 基表的修改影响到视图的结构,可以使用 SCHEMABINDING 子句将视图绑定到基础表的架构。指定了SCHEMABINDING 后,要对影响视图结构的基表列或其它对象进行修改时,必须首先修改或删除视图定义本身,接触这种依赖关系。使用SCHEMABINDING 时,查询语句必须使用两部分名称,所有引用的对象必须在同一个数据库内,并且不允许在 SELECT
列表中使用 *.
CREATE VIEW dbo.vwAvoidModi WITH SHEMABINDING --加上架构名,并带上 架构绑定。
AS
SELECT col1, col2, col3 FROM dbo.Tab ----不能用 * ,要加上 架构名
这之后,去修改 该视图的 基表时候,会报错误!可以有效防止基表被修改。
c. P 299 更新视图中的数据
重点: 通过视图去修改基表,如果 该视图是 多张基表关联生成,那么 更新的时候是通过 关联的 ON 后面的 那个 条件去到基表里找能匹配上的数据去更新,很可能因此而多更新了列,因为关联时候不止关联出一条数据的话。
更为严重的是,很可能会因为这样更新后而丢掉应有的行。 P301 -302 为了防止出现丢失行,确保
在数据经过修改后仍可通过视图看到数据,那么应在视图中使用 CHECK OPTION 选项,例子:
CREATE VIEW dbo.vcs
AS
SELECT C.ClassID, c.ClassName...
FROM dbo.Student AS S
ON c.ClassID = s.ClassID
WITH CHECK OPTION;
重命名:
sp_rename '','','';
第十二章 游标
Declare cursor 时候并不生成结果集,当执行 open cursor 时候才生成
@@FETCH_STATUS -- 0 有fetch 成功
-- 1 fetch 失败或者行不在结果集中
-- 2 表示提取的行不存在。
快速 只进游标,可滚动游标
FOR READ ONLY --- 只读游标
FOR UPDATE -- 可更新游标
SCROLL 或者 for update 时候就不能指定 Fast_forward 了
P306 FETCH 语句定位关键字
静态游标、动态游标、由键集驱动的游标
默认情况下 游标是 动态的,在滚动游标提取行时,游标能够反映结果集中所做的最新更改,
要建立一个静态游标, 可以在 游标名称后面添加 INSENSITIVE 关键字。然而,及时没有使用这个关键字,
当某个游标的 SELECT 语句有DISTINCT ,UNION,GROUP BY 或者 HAVING 关键字时候,处理游标的方式与指定INSENSITIVE 关键字一样,这时候结果集都是被聚合了。。。
P309 - 310 使用可更新游标进行数据更新。。。