<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SQL Server &amp; Service Broker</title>
        <link>http://blog.entlib.com/EntLib/category/7.aspx</link>
        <description>讨论、分析、研究SQL Server 和 Service Broker 等相关技术。</description>
        <language>zh-CN</language>
        <copyright>EntLib.com</copyright>
        <managingEditor>entlib@hotmail.com</managingEditor>
        <generator>EntLib.com Blog Version 3.0.0.0</generator>
        <item>
            <title>SQL Server XML 代码编写示例</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;SQL Server XML &lt;/b&gt;&lt;b&gt;代码编写示例&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;XML 数据类型有很多内置的方法，这些方法只针对XML数据类型。比较常用的有.query、.value、.modify、.nodes、.exist 等等方法。本文中所有的SQL 脚本范例都基于AdventureWorks 数据库进行过测试。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(1) .query &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;允许用户通过运行基于XQuery 格式化的查询来访问XML。XQuery 允许返回多个数据片段，而不是一个离散的值。.Query要求一个参数，运行在XML数据实例之上有效的XQuery。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如下是提取Production.ProductModel 表中ProductModelID 为 66 的产品文档：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'declare namespace PI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: red; font-size: 10pt"&gt;    /PI:root/PI:Location/PI:step'&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: red; font-size: 10pt"&gt;    /root/Location/step'&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述2个SQL 脚本在定义XML namespace有一些细微的差异，可以比较一下执行产生的结果。也可以在 XQuery 之外使用 With XMLNamespaces ('http://xxx' as XX)，提高XML 查询的可读性。上述代码通过WITH XMLNamespaces() 声明编写功能相同的代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: fuchsia"&gt;PI&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/PI:root/PI:Location/PI:step'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;设置默认命名空间：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location/step'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(2) .value &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;是查询离散数据的方法，使用一个XPath 的语法来定位指定的结点，并得到标量值。需要确保指定的XPath 真正返回一个离散值。&lt;/div&gt;
&lt;div&gt;查询ProductModelID为 66 的第一个Location元素中LabelHours 属性的值。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'(/root/Location/@LaborHours)[1]'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'decimal (5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如果不是属性，而是子元素，则应该去掉@符号。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(3) .modify &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;是对XQuery 的扩展，以提供XQuery 的数据修改能力。这种对XQuery的扩展称作XML数据处理语言（XML Data Manipulation Language），或者XML DML。XML DML向XQuery 中添加了3条新命令：insert / delete / replace value of。其中replace value of 替代了SQL的UPDATE语句。&lt;/div&gt;
&lt;div&gt;例如，将上述查询的LabelHours属性值，由原来的1.5小时更新为1.75小时。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;UPDATE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SET&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;modify&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'replace value of (/root/Location/@LaborHours)[1] with 1.75'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在UPDATE语句中，使用 replace value of 关键字来指定更新中的XML部分。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(4) .nodes &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;用来获取XML块，并将之拆分多个数据行，以关系的形式存储。通过.nodes 所做的工作，本质上是将一个XML 数据的实例拆分到自己的表中。这意味着，我们需要将.nodes 的结果作为一个表，而不是一个列来看待。在.nodes 和一个数据库表之间的主要差别是，必须将.nodes 的结果交叉应用（cross apply）回指定的XML数据的来源表中。可以将cross apply 想象成某种连接，只不过使用的是cross apply关键字，而不是JOIN关键字，并且.nodes 替代了ON子句。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'./@LocationID'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'int'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;LocationID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'./@LaborHours'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'decimal(5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;LaborHours&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: gray; font-size: 10pt"&gt;CROSS&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;nodes&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;将LocationID和LaborHours 信息拆分到列上，就好像它们位于关系表中一样。通过使用.nodes 方法，本质上将一个表 ProductModel 转换成了2个表（源表，以及ProductModel表中的Instructions 列所生成的.nodes 结果）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面的范例脚本将Instructions XML数据中material 子节点的数据库取出，转为以数据表n的字段 c 来显示，其中字段c 的数据类型也是XML，进一步取出c的值，并转换为nvarchar数据类型。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt; &lt;span style="color: blue"&gt;XML&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: teal"&gt;Instructions&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;ns&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'.'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;NewCol&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;nodes&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/ns:root/ns:Location/ns:step/ns:material'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: teal"&gt;n&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="524" height="179" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_XML_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(5) .exist &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;.exist 方法有点像SQL中的EXISTS 语句，接受一个XQuery 表达式，并返回一个布尔值。&lt;/div&gt;
&lt;div&gt;查询Instructions XML数据中存在LaborHours属性的数据记录。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'(/root/Location/@LaborHours)[1]'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;'decimal(5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;exist&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location/@LaborHours'&lt;/span&gt;&lt;span style="color: gray"&gt;)=&lt;/span&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;总结一下SQL Server 2005/2008 为XML数据类型提供的函数：&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="607" height="163" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_XML_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/191.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx</guid>
            <pubDate>Sat, 16 May 2009 02:11:59 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/191.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/191.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL Server 高级查询 – 学习笔记</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;SQL Server &lt;/b&gt;&lt;b&gt;高级查询 – &lt;/b&gt;&lt;b&gt;学习笔记&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是《SQL Server 2005 高级程序设计》, Professional SQL Server 2005 Programming – 第六章：高级查询的学习笔记。主要包含如下内容：&lt;/div&gt;
&lt;div&gt;1. 嵌套的子查询；&lt;/div&gt;
&lt;div&gt;2. 相关子查询；&lt;/div&gt;
&lt;div&gt;3. 派生表；&lt;/div&gt;
&lt;div&gt;4. EXISTS 运算符的使用；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;大部分的子查询（当然不是全部）也能够用联接（Join）来实现，关于联接和子查询的性能比较，需要具体分析。本文所有的范例SQL 脚本使用&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=394"&gt;&lt;font color="#0000ff"&gt;AdventureWorks &lt;span&gt;&lt;span&gt;数据库&lt;/span&gt;&lt;/span&gt;。&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;构建嵌套的子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;嵌套的子查询（nested subquery） - 要么返回一个用于外部查询的值，要么返回一个与IN运算符一起使用的值的列表。当想要明确使用 = 运算符时，则使用返回一个值的查询，也就是从一行返回一列。如果要返回一个列表，则必须在外部查询中使用 IN 运算符。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;（1&lt;/b&gt;&lt;b&gt;）创建使用单值的嵌套子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询系统中购买产品的第一天所销售的所有产品项的ProductID，SQL 脚本如下：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;内部查询（&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;/span&gt;）获取一个值，该值将在外部查询中使用。由于这里使用了 = ，因此内部查询只能返回一个值，也就是一行中返回一列，否则将在运行时产生错误。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="673" height="362" alt="" src="/userfiles/EntLib/image/SQLServer/ProSQLServer2005_Programming_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;（2&lt;/b&gt;&lt;b&gt;）创建返回多个值列表的嵌套子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在实际的应用中，最常见的是这种子查询，返回某种类型的范围列表，并在查询中作为一种判断标准来使用。&lt;/div&gt;
&lt;div&gt;下面查询条件：查询应征了公司另一个职位的所有雇员的列表。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;IN&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt; &lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述代码返回2条记录：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="615" height="256" alt="" src="/userfiles/EntLib/image/SQLServer/ProSQLServer2005_Programming_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述的查询脚本也可以使用内部联接而非嵌套的子查询来实现，脚本如下所示：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;on&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;构建相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;相关子查询与前面的嵌套子查询的不同之处在于，在相关子查询中，信息是双向而非单向的。在嵌套子查询中，内部查询只处理一次，信息被传出以用于外部查询，外部查询也只执行一次。&lt;/div&gt;
&lt;div&gt;在相关子查询中，按以下3个步骤来进行：&lt;/div&gt;
&lt;div&gt;（1）外部查询得到一条记录并将其传入到内部查询。&lt;/div&gt;
&lt;div&gt;（2）内部查询基于传入的值执行。&lt;/div&gt;
&lt;div&gt;（3）内部查询从其结果中把值传回到外部查询，外部查询使用这些值来完成其处理。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;WHERE &lt;/b&gt;&lt;b&gt;子句中的相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询每一位顾客在系统中的第一张订单中的OrderID 和 OrderDate，也就是要知道顾客在第一天下订单的日期和订单的ID。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;=(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;                  &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;                  &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; &lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;SELECT &lt;/b&gt;&lt;b&gt;列表中的相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询顾客的名字以及首次订购的日期。因为要获得顾客的名字，这意味着必须用到Person.Contact表，另外还需要知道第一次订购的日期。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询结果中，OrderDate列会有NULL值。这是由于Sales.SalesOrderHeader 表中没有与Person.Contact 表（外部查询）中的记录相匹配的记录。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询也可以通过Join联接来实现：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;LEFT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;GROUP&lt;/span&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;派生表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;派生表（derived table），有时也称为内联视图，是由查询结果集的列和行组成，与常规的表一样。&lt;/div&gt;
&lt;div&gt;假设要获取订购过某种产品的顾客列表，如Minipump：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'Minipump'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询很容易，但是如果想要获得同时订购过Minipump产品，又订购过 AWC Logo Cap 产品的所有顾客，就有点麻烦了。&lt;/div&gt;
&lt;div&gt;需要把Minipump的订购者和AWC Logo Cap产品的订购者的查询结果联接起来，可以通过派生表来实现。要创建派生表，需要注意如下事项：&lt;/div&gt;
&lt;div&gt;1. 用圆括号包围产生结果集的查询结果；&lt;/div&gt;
&lt;div&gt;2. 给查询的结果赋予别名；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面通过派生表，实现 - 获得同时订购过Minipump产品，又订购过 AWC Logo Cap 产品的所有顾客：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'Minipump'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: teal"&gt;pumps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ON&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;pumps&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'AWC Logo Cap'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: teal"&gt;caps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ON&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;caps&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;但需要注意的是，派生表并不能解决所有的问题。当结果集相当庞大且需要联接大量的记录时，可能要考虑使用临时表，并在其上创建索引（派生表没有索引）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. EXISTS &lt;/b&gt;&lt;b&gt;运算符&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;当使用EXISTS 时，并不真正返回数据 – 返回的是关于数据是否存在的TRUE/FALSE，数据满足在EXISTS 语句运行所基于的查询中建立的条件。&lt;/div&gt;
&lt;div&gt; --- 查询应征了该公司另一个职位的雇员列表：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;EXISTS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;    &lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;使用EXISTS 关键字时，SQL Server 不必在所有的行上进行连接。实际上，SQL Server将浏览记录，直到找到第一个满足条件的记录然后停止于那里。只要有一条记录满足条件，EXISTS 将为真，因此不再需要继续浏览。在进行内部连接时，性能差异将更为显著。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/190.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx</guid>
            <pubDate>Wed, 29 Apr 2009 13:23:45 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/190.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/190.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之八</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之八&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx"&gt;&lt;font color="#0000ff"&gt;Book VI – Analysis Services &lt;span&gt;&lt;span&gt;分析服务&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx"&gt;Book VII – Performance Tips and Tricks &lt;span&gt;&lt;span&gt;性能调试及技巧&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VIII – Database Administration &lt;/b&gt;&lt;b&gt;数据库管理&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节介绍了数据库的一些基本管理操作，如移动数据库、备份和恢复、数据库自动维护计划等等。另外，还介绍了SQL Server 帐号管理及访问控制，数据同步（Replication），Partitioning等等。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book IX – Appendixes &lt;/b&gt;&lt;b&gt;附录&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节介绍了SQL Server 2008的一些网上资源，如Microsoft SQL Server官方站点、开发中心、新闻组等等。另外也介绍了SQL Server 2008 的一些问题及解决办法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/155.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx</guid>
            <pubDate>Fri, 20 Mar 2009 17:17:45 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/155.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/155.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之七</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之七&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx"&gt;&lt;font color="#0000ff"&gt;Book VI – Analysis Services &lt;span&gt;&lt;span&gt;分析服务&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VII – Performance Tips and Tricks &lt;/b&gt;&lt;b&gt;性能调试及技巧&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节简单介绍了一些性能监控工具，如Windows 任务管理器、性能监视器、数据库引擎优化顾问（Database Engine Tuning Advisor）、以及SQL Server Profiler等等。这些都是DBA 优化和管理数据库的基本工具。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另外，介绍了如何使用索引（Index）来强化查询性能，分析了查询执行计划（Query Execution Plan）。其中，本节列举一些数据表的设计规范，如：&lt;/div&gt;
&lt;div&gt;1. 总是定义主键值（Always define a primary key）；&lt;/div&gt;
&lt;div&gt;2. 避免前置通配符（Avoid leading wildcards）；&lt;/div&gt;
&lt;div&gt;3. 避免高度重复的索引值（Avoid highly duplicate indexes）；&lt;/div&gt;
&lt;div&gt;4. 不要忘记对临时表建立索引（Don’t forget to index temporary tables）；&lt;/div&gt;
&lt;div&gt;5. 在join列上建立索引（Place indexes on join columns）；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面分别演示了在查询过滤条件中使用和不使用前置通配符时，查询执行计划的不同表现。&lt;/div&gt;
&lt;div&gt;在下面的查询脚本中，不使用前置通配符，发现建立在LoginID字段上的索引发生作用，查询时不要扫描整个聚集索引。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt; &lt;span style="color: blue"&gt;from&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: blue"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;LoginID&lt;/span&gt; &lt;span style="color: gray"&gt;like&lt;/span&gt; &lt;span style="color: red"&gt;'adventure-works\rob0%'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/SQLServer/SQL_PerformanceTips_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
在下面的查询脚本中，由于使用前置通配符，发现建立在LoginID字段上的索引没有作用了，查询时需要扫描整个聚集索引。&lt;br /&gt;
 &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt; &lt;span style="color: blue"&gt;from&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;LoginID&lt;/span&gt; &lt;span style="color: gray"&gt;like&lt;/span&gt; &lt;span style="color: red"&gt;'%adventure-works\rob0%'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: center"&gt; &lt;img height="559" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/SQL_PerformanceTips_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是查询执行计划中部分输出的介绍：&lt;/div&gt;
&lt;div&gt;物理运算（Physical Operation）: Table Scan — To satisfy the query, SQL Server had to read (that is, scan) all the rows to return its results. Table scans can be extremely costly, especially when encountered on tables containing copious data.&lt;/div&gt;
&lt;div&gt;估计开销 - Estimated Costs (I/O, CPU, 运算符Operator,子树 Subtree) — These indicators provide guidance on SQL Server’s internal estimates of its expected workload to return your results. Note: These numbers don’t mean much in isolation; they’re interesting only when compared against other query plans.&lt;/div&gt;
&lt;div&gt;估计行数（Estimated Number of Rows）: Because we asked to see all the rows, SQL Server accurately reports that it estimates a return result set size of rows.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/154.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx</guid>
            <pubDate>Fri, 20 Mar 2009 16:59:55 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/154.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/154.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之六</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之六&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;Book IV – Database Programming &lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;Book V – Reporting Services &lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VI – Analysis Services &lt;/b&gt;&lt;b&gt;分析服务&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Microsoft SQL Server 2005/2008 Analysis Services (SSAS) 为商业智能应用程序提供联机分析处理 (OLAP) 和数据挖掘功能。Analysis Services 允许您设计、创建和管理包含从其他数据源（如关系数据库）聚合的数据的多维结构，以实现对 OLAP 的支持。对于数据挖掘应用程序，Analysis Services 允许您设计、创建和可视化处理那些通过使用各种行业标准数据挖掘算法，并根据其他数据源构造出来的数据挖掘模型。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本节介绍了Analysis Services功能，包括OLAP和数据挖掘（Data Mining）功能。下面简要介绍一下创建SQL Server Analysis Project 项目的基本步骤：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;创建SQL Server Analysis Project &lt;/b&gt;&lt;b&gt;项目&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;新建项目，选择商业智能项目/Analysis Services 项目，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="471" alt="" width="657" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;定义数据源Data Source&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在Solution面板中，右键点击数据源，选择“新增数据源…”，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="481" alt="" width="450" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;安装新建数据源向导对话框，一步一步创建数据源，范例程序采用AdventureWorksDW2008。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;定义数据源视图 Data Source View&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Data Source View 定义了Cube中的表和视图。创建Data Source View的步骤安装向导操作就可以了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;创建Cube&lt;/b&gt;&lt;b&gt;，使用Measures&lt;/b&gt;&lt;b&gt;和Dimensions&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;一个Cube包含Measures和Dimensions。维度(dimension)：多维立方体Cube的基本组成部分(a fundamental component)，用以从用户兴趣的角度组织数据（以合乎逻辑的层次化的格式组织商业数据）。测度(measure)：事实表(fact table)中的包含可计算、合计等的数值型数据的列。在一个立方体中，测度被事实表分组为测度组。测度组(measure groups)：用以对事实表中包含的测度进行分组，并在维度和测度之间进行联系。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;立方体设计器由九个选项卡组成：立方体结构(Cube Structure)、维度用途(Dimension Usage)、计算(Calculations)、关键性能指示器(KPIS, Key Performance Indicators)、行为(Actions)、分区(Partitions)、透视图(Perspectives)、转换(Translations)、浏览器(Browser)。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;部署Analysis Services&lt;/b&gt;&lt;b&gt;项目&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在"解决方案浏览器"中右键单击Analysis Services项目选择"部署(Deploy)"。部署之前，需要确认SQL Server Analysis Services 服务已经启动了。看看下面的部署进度界面：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="583" alt="" width="537" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_3.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;详细的操作步骤，可以查询SQL Server 2005/2008 的帮助文档。部署成功后，也可以通过SQL Server Management Studio 登录到Analysis Services，查看刚刚部署的AdventureWorks数据库（注意：不同于数据库引擎中的AdventureWorks 数据库）。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="545" alt="" width="450" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_4.gif" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/153.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx</guid>
            <pubDate>Sun, 15 Mar 2009 10:05:11 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/153.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/153.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之五</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之五&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;Book IV – Database Programming &lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;报表服务&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节讲解了SQL Server 的Reporting Services报表服务，Reporting Service微软公司推出的新一代的报表解决方案。它是一个完整的基于服务器的平台，可以建立、管理、发布传统的基于纸张的报表或者交互的、基于Web的报表。而且最大的特色是，它采用基于XML的RDL报表描述语言来定制报表，可以用于给第三方定制开发符合接口标准的报表工具，使得软件开发人员和企业可以将报表集成到已有的系统或第三方的应用中。不过，本节主要关注于Reporting Services的基本特性，包括Reporting Services 的架构，及创建，管理与发布等等，不涉及Reporting Services的高级功能。&lt;/div&gt;
&lt;div&gt;Visual Studio 商业智能项目包含3个报表项目模板，关于各个报表项目模板的介绍，请&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx"&gt;&lt;span&gt;&lt;span&gt;点击这里&lt;/span&gt;&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第二章详细介绍了通过 Report Builder 和 Report Model创建报表，具体细节参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Builder &lt;span&gt;和&lt;/span&gt;Report Model&lt;span&gt;创建&lt;/span&gt;Report&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第三章详细介绍了通过 Report Designer 创建报表，具体细节参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Designer &lt;span&gt;创建&lt;/span&gt;Report&lt;span&gt;报表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/152.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx</guid>
            <pubDate>Sun, 15 Mar 2009 08:07:48 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/152.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/152.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Visual Studio 商业智能项目包含3个报表项目模板</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Visual Studio &lt;/b&gt;&lt;b&gt;商业智能项目包含3&lt;/b&gt;&lt;b&gt;个报表项目模板&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当你使用BIDS（商业智能项目）的报表设计器（Report Designer）时，你可以创建和操作报表，并发表到报表服务器（Report Server），允许用户访问报表。Visual Studio 商业智能项目包含了3种报表项目模板，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="509" width="690" alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_3_templates.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;报表服务器项目（Report server project）: Report server projects are used to create reports. Once created, your reports can be deployed to your report server. You can add shared data sources, and multiple reports to a report server project.&lt;/div&gt;
&lt;div&gt;报表服务器项目向导（Report Server Project Wizard）: This is similar to the report server project, but it immediately launches a wizard to simplify the creation of the first report.&lt;/div&gt;
&lt;div&gt;报表模型项目（Report model project）: Report model projects are used to create report models. Once deployed to a report server, a report model is used to create an actual report using the Report Builder.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于报表模型项目（Report Model）的使用，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Builder &lt;span&gt;和&lt;/span&gt;Report Model&lt;span&gt;创建&lt;/span&gt;Report&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于报表服务器项目（Report Server Project）的使用，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Designer &lt;span&gt;创建&lt;/span&gt;Report&lt;span&gt;报表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/151.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx</guid>
            <pubDate>Sun, 15 Mar 2009 01:30:00 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/151.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/151.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SSRS 使用Report Designer 创建Report报表</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;SSRS &lt;/b&gt;&lt;b&gt;使用Report Designer &lt;/b&gt;&lt;b&gt;创建Report&lt;/b&gt;&lt;b&gt;报表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;开发人员可以通过SQL Server的Business Intelligence Development Studio（BIDS） 创建数据报表。如下图所示，该图描述了在BIDS中使用Report Designer创建Report的流程。Report Designer 指定了报表的所有细节，如Data Source数据源、查询、过滤器Filter、以及如何显示报表数据等等。在报表发布到SSRS 报表服务器上后，用户就可以查询这些报表来检索数据了。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="424" alt="" width="500" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_1.gif" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;使用BIDS Report Designer设计报表，范例程序采用AdventureWorks2008 数据库。其主要操作步骤如下：&lt;/div&gt;
&lt;div&gt;1. 启动BIDS – Microsoft SQL Server 2008 / SQL Server Business Intelligence Development Studio (BIDS)。&lt;/div&gt;
&lt;div&gt;2. 选择File / New / Project，选择Report Server Project 报表服务器项目。&lt;/div&gt;
&lt;div&gt;3. 右键点击 Reports 报表，在弹出菜单中选择Add New Report 添加新报表。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="339" width="445" alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;4. 然后启动Report向导，一步一步创建Report。在Report Designer中，可以拖拉列的宽度，修改Report的标题，修改列的标题，插入图片等等。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="381" alt="" width="694" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_3.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;5. 在修改完成Report后，进一步设置项目的TargetServerURL属性，指定该报表发布的目的报表服务器的地址。&lt;/div&gt;
&lt;div&gt;6. 在成功发布报表后，既可以通过访问Report Server 来访问报表，也可以通过Report Manager 来查看报表。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="447" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_4.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;更具体详细的操作步骤，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;1. Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies, Book V – Reporting Services, 第三章 – Creating Reports with Report Designer.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2. SSRS 使用Report Builder 和Report Model创建Report&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/150.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx</guid>
            <pubDate>Sat, 14 Mar 2009 17:46:16 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/150.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/150.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SSRS 使用Report Builder 和Report Model创建Report</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;SSRS &lt;/b&gt;&lt;b&gt;使用Report Builder &lt;/b&gt;&lt;b&gt;和Report Model&lt;/b&gt;&lt;b&gt;创建Report&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Report Builder（报表设计器）是一个简单的GUI工具，用户可以使用Report Builder创建自己需要的报表。在创建好Report Model（报表模型）并发布到Reporting Services站点后，用户就可以使用Report Model和Report Builder创建报表了。尽管通过Report Builder 创建Report比较简单，但预测用户需要什么报表以及创建Report Model可能需要一些时间。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="517" alt="" width="523" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_1.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;如上图所示，显示了使用通过Report Model（报表模型）创建Report的流程。首先，开发人员创建一个Report Model，就像一个蓝图。其中，指定了数据源，表示将显示的数据。然而，就像你不能生活在一个房屋的图纸中，你不能通过Report Model来查看报表。但是，用户可以使用Report Model和Report Builder创建自己的报表（Report）。在通过Report Model创建好Report后，该Report也可以发布到SSRS报表服务器上。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;首先，通过SQL Server Reporting Services 配置管理器验证Reporting Services是否有安装和启动。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_2.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;SSRS报表服务默认以Native mode部署，在SQL Server 2008中，SSRS 不在依赖于IIS，通过IIS 并不能找到ReportServer的相关应用程序目录。Reporting Services的Web Server URL地址为：http://servername/ReportServer&lt;/div&gt;
&lt;div&gt;Reporting Services的Report Manager URL地址为：http://servername/Reports&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;通过Report Builder 和Report Model创建Report，需要经历如下几个基本步骤：&lt;/div&gt;
&lt;div&gt;1. 通过Business Intelligence Development Studio（BIDS）创建Report Model项目。&lt;/div&gt;
&lt;div&gt;2. 向Report Model 项目中添加Data Source 和 Data Source View。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="320" alt="" width="487" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_3.jpg" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;3. 在Report Model 项目中创建Report Model-报表模型。如上图所示，该项目中已经创建了Employees.smdl 报表模型。&lt;/div&gt;
&lt;div&gt;4. 发布Report Model 到SQL Server Reporting Services 报表服务器上。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="459" alt="" width="538" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_4.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;如在发布过程中碰到Microsoft.ReportingServices.RsProxy.AccessDeniedException异常，请参考如下文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/13/sql-server-2008-ssrs-report-model-report-server.aspx"&gt;SQL Server 2008 - SSRS Report Model &lt;span&gt;&lt;span&gt;发布到&lt;/span&gt;Report Server&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;该文章提供了对应的解决方案。&lt;/div&gt;
&lt;div&gt;5. 访问Report Manager 站点，启动Report Builder。如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="433" alt="" width="650" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_5.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;其中，模型和数据源目录是上一步成功发布Report Model到Report Server上后，自动创建的目录。访问[模型]目录，就可以看到上一步成功发布的 Employees 报表模型了。&lt;/div&gt;
&lt;div&gt;  &lt;/div&gt;
&lt;div&gt;6. 通过Report Manager工具栏上的Report Builder（报表生成器），并使用上一步创建的Report Model创建Report。在创建好Report后，再发布到Reporting 服务上。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="194" alt="" width="613" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_6.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;下面是已经创建好的报表，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="494" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_7.jpg" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;具体详细的操作步骤，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;1. Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies, Book V – Reporting Services, 第二章 – Creating Reports with Report Builder.&lt;/div&gt;
&lt;div&gt;2. SSRS Tutorial: SQL Server 2008 Reporting Services Tutorial&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.accelebrate.com/sql_training/ssrs_2008_tutorial.htm"&gt;http://www.accelebrate.com/sql_training/ssrs_2008_tutorial.htm&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/149.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx</guid>
            <pubDate>Sat, 14 Mar 2009 08:06:34 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/149.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/149.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之四</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之四&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height="286" width="230" align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;Book III – Interacting with Your Data &lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;数据库编程&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节前面部分介绍了SQL Server的一些基本对象，如存储过程Stored Procedure、用户自定义函数Function、触发器Trigger等等。&lt;/div&gt;
&lt;div&gt;在第六章介绍了Linked Server，如何访问远程数据库。具体细节可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/06/sql-serverlinked-server.aspx"&gt;SQL Server&lt;span&gt;&lt;span&gt;访问远程数据库和&lt;/span&gt;Linked Server&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章介绍了SQL Server 2008的一些高级开发主题，如SQL Server Service Broker。Service Broker 是SQL Server 2005 中引入的基于数据库的消息机制，在SQL Server 2008进行了细微改进。Service Broker 提供了可靠的、异步的消息服务，在企业级应用中，有广阔的应用场景。具体细节可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx"&gt;SQL Server Service Broker &lt;span&gt;&lt;span&gt;–&lt;/span&gt;&lt;span&gt;消息队列&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/148.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx</guid>
            <pubDate>Sat, 14 Mar 2009 05:28:26 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/148.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/148.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>