WEB开发网
开发学院数据库MSSQL Server 细说Sql Server中的视图(下) 阅读

细说Sql Server中的视图(下)

 2009-06-19 10:29:26 来源:WEB开发网   
核心提示: 可以再次跟踪提交到Sql server的操作,就能看到,细说Sql Server中的视图(下)(5),他提交到目标对象是视图;还是那句话:如果客户端希望SqlServer发送视图的元数据信息,而不是基础表的元数据时,来达到某列中强制已知值的唯一性的目的;我们可以演示一下,首先创建一个基础表

细说Sql Server中的视图(下)

可以再次跟踪提交到Sql server的操作,就能看到,他提交到目标对象是视图;

还是那句话:如果客户端希望SqlServer发送视图的元数据信息,而不是基础表的元数据时,可以在创建或修改视图时指定此选项

这次明白了吗?

我个人总结,只要有VIEW_METADATA选项就有必要加上CHECK OPTION选项,而SCHEMABINDING选项,最好也要加上,防止你的视图“孤立”,而在索引视图中SCHEMABINDING选项是必须加上的。

6.索引视图

如果没有索引,视图中的数据不会有任何物理表现形似,如果加上索引,则就把视图中的数据物理化了,SqlServer会在修改基础表时同步索引视图。但你不能直接同步视图内容。

我们知道在表上创建索引,能提高性能,相同,在视图也是一样,在视图上创建的第一个索引必须是唯一聚集索引,之后才可以创建其他的非聚集索引。

索引视图必须使用SCHEMABINDING选项,并且不能引用其他视图,只能引用基础表和UDF,而基础表和UDF必须使用两部分命名约定来引用(参见5.视图选项中的SCHEMABINDING选项)。

除了性能,你可能还会因为其他原因使用索引视图,比如在一张基础表中有一列我们要强制该列中已知值的唯一性,但是允许出现多次的NULL值,我们怎么办呢,我们首先想到的可能是用UNIQUE约束,但是UNIQUE会认为两个NULL值相等,那么这个不得不放弃了,那还有什么办法呢?

其实我们可以利用一个索引视图来完成这个任务,利用索引视图筛选所有非NULL的数据,那么这种索引将防止重复的已知值进入基础表,但允许多个NULL,因为NULL不是唯一索引的一部分,我们在向基础表中插入数据的时候,就利用索引视图的UNIQUE来限制我们的数据,来达到某列中强制已知值的唯一性的目的;

我们可以演示一下,首先创建一个基础表T2和一个索引视图V2:

  1: CREATE TABLE T2(col1 INT,col2 NVARCHAR(50))
  2:  
  3: CREATE VIEW V2
  4: WITH SCHEMABINDING
  5: AS
  6: SELECT col1 FROM dbo.T2 WHERE col1 IS NOT NULL;
  7: CREATE UNIQUE CLUSTERED INDEX idx_col1 ON dbo.V2(col1);

然后我们向T2表中插入以下数据:

  1: INSERT INTO t2(col1,col2) VALUES(1,'2')
  2: INSERT INTO t2(col1,col2) VALUES(1,'3')
  3: INSERT INTO t2(col1,col2) VALUES(null,'4')
  4: INSERT INTO t2(col1,col2) VALUES(null,'5')

那么以上4条INSERT哪条会失败呢?答案是2。最后让我们SELECT 一下基础表T2,看实现我们开始那个要求了吗?

1: SELECT * FROM t2

执行:

细说Sql Server中的视图(下)

哈哈实现了吧!

系列文章:

细说Sql Server中的视图(上)

上一页  1 2 3 4 5 

Tags:细说 Sql Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接