ADO.NET 2.0中的查询通知
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:学习如何使用ADO.NET 2.0和SQL Server 2005中新的通知技术处理即席数据刷新。
SELECT au_id, au_lname FROM WestCoastAuthors
WHERE au_lname LIKE 'S%'
大多数程序员都很熟悉视图,但可能并不熟悉索引视图。在一个非索引视图中,视图中的数据并不作为独立副本而存储在数据库中;每次使用视图时,视图中包含的查询将被执行。因此在上面的例子中,将执行获取WestCoastAuthors结果集的查询,然后再通过条件判定找出那些我们想要的WestCoastAuthors。索引视图则存储了数据副本,因此如果我们将WestCoastAuthors创建成一个索引视图,我们就拥有两份authors数据。您现在可以通过两种方式更新数据,或者通过索引视图,或者通过原始表。SQL Server因此需要对两份物理数据存储的变化进行检测,从而将一处的变更应用到另一处。这种变更检测机制和数据库引擎处理查询通知时使用的机制是一样的。
由于变更检测的这种实现方式,因此并非所有视图都可以创建索引。那些有关索引视图的限制条件对于查询通知也同样生效。例如:以上面的方式书写的WestCoastAuthors 视图就不能创建索引。要想在视图上创建索引,视图定义必须使用2部分命名法则,且必须显式地列出结果集中所有的列名。因此为了创建索引我们来修改一下视图的定义:
CREATE VIEW WestCoastAuthors
WITH SCHEMABINDING
AS
SELECT au_id, au_lname, au_fname, address, city, state, zip, phone
FROM dbo.authors
WHERE state in ('CA', 'WA', 'OR')
只有遵循了索引视图规则的那些查询才可以使用通知。注意:尽管使用了相同的机制来判定是否一个查询结果集发生了改变,但查询通知不会导致SQL Server创建数据副本,而索引视图会。您可以在SQL Server 2005 Books Online中找到有关索引视图的一系列规则。如果提交了一个附带通知请求但是违背规则的查询,SQL Server会立刻发出一个原因为“无效查询”的通知。可是,通知发布到哪里呢?
来源:51CTO 责编:豆豆技术应用