⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11398.htm

📁 一本很基础的SQL讲解
💻 HTM
📖 第 1 页 / 共 5 页
字号:
FROM    sys.fn_indexinfo ('docs', 'idx_xCol_Path' , DEFAULT, 'DETAILED')
</PRE>
<P>这产生在表 T 的所有分区中 XML 索引 idx_xCol_Path 所占用的磁盘页数。如果没有 <B>sum()</B> 函数,则结果将会返回每个分区的磁盘页使用。</P>
<H3>XML 架构处理</H3>
<P>在系统中,XML 架构是可选的。如前所述,没有绑定到 XML 架构的 XML 数据类型被认为是非类型化的;XML 节点值将作为 Unicode 字符串存储,而 XML 实例需要进行格式良好性检查。可以建立非类型化 XML 列的索引。 </P>
<P>要类型化 XML,可以将 XML 数据类型与已注册到 XML 架构集合的 XML 架构相关联。新的 DDL 语句允许创建一个或多个 XML 架构可以注册到的 XML 架构集合。绑定到 XML 架构集合的 XML 列、参数或变量是根据该集合中的所有 XML 架构进行类型化的。在 XML 架构集合中,类型系统标识每个使用其目标命名空间的 XML 架构。 </P>
<P>XML 实例中的每个顶层 XML 元素都必须指定它遵循的可能为空的目标命名空间。在插入和修改数据时,将根据每个顶层元素的目标命名空间对其进行有效性检查。二进制 XML 表示根据相关的 XML 架构信息对类型化值进行编码,并且是完整描述的,因此,与非类型化的 XML 相比,它的再解析效率更高一些。在 XML 索引中,还将对值进行适当的类型化(如果 /book/price 是在像 xs:decimal 这样的命名空间中定义的,则会存储为小数)。</P>
<P>在查询编译的过程中,使用 XML 架构进行类型检查,并且会因类型不匹配而引起静态错误。查询编译器还将 XML 架构用于查询优化。 </P>
<P>数据库引擎的元数据子系统包含 XML 类型信息,例如 XML 架构集合和它们所包含的 XML 架构,以及基本 XSD 和关系类型系统之间的映射。几乎所有的 W3C XML 架构 1.0 规范(请参阅 <A href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/" target=_blank>http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/</A> 和 <A href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/" target=_blank>http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/</A>)都支持。XML 架构文档中的注释和注解都没有保留,并且不支持 key/keyref。</P>
<H4>XML 架构集合</H4>
<P>XML 架构集合是一个元数据实体(通过关系架构定义作用域),并且包含一个或多个相关(例如,使用&lt;xs:import&gt;) )或不相关的 XML 架构。XML 架构集合中单独的 XML 架构是使用其目标命名空间进行标识的。XML 架构集合是安全的实体,大致与表类似。</P>
<P>XML 架构集合是使用 CREATE XML SCHEMA COLLECTION 语义创建的,提供一个或多个 XML 架构。然后可以使用 XML 架构集合来类型化 XML 列。这种设计产生了灵活的数据模型,其中,按照不同的 XML 架构类型化的 XML 可以存储在相同的列中。当 XML 架构的数量很大时,这尤其方便。此外,这种设计还支持对 XML 架构进行一定程度的扩展。</P>
<P>另外,类型化的 XML 列中的选项 DOCUMENT 或 CONTENT 分别指定了 XML 树或片段是否可以存储在 XML 列中。默认为 CONTENT。对于 DOCUMENT,每个 XML 实例都必须指定其顶层元素的目标命名空间,该 XML 实例就是按照这个命名空间来进行有效性检查和类型化的。而对于 CONTENT,每个顶层元素都可以指定 XML 架构集合中的任何一个目标命名空间。该 XML 实例按照出现在实例中的所有目标命名空间进行有效性检查和类型化。 </P>
<P>例:创建 XML 架构集合</P>
<P>假定要使用带有目标命名空间 http://myBooks 的 XML 架构来类型化 XML 实例。可以创建一个 XML 架构集合 myCollection 并将该 XML 架构作为 myCollection 的内容,如下所示:</P><PRE class=codeSample>CREATE XML SCHEMA COLLECTION myCollection AS 
'&lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://myBooks" 
   elementFormDefault="qualified"
  targetNamespace="http://myBooks"&gt;
  &lt;xsd:element name="bookstore" type="bookstoreType" /&gt;
  &lt;xsd:complexType name="bookstoreType"&gt;
   &lt;xsd:sequence maxOccurs="unbounded"&gt;
     &lt;xsd:element name="book" type="bookType" /&gt;
   &lt;/xsd:sequence&gt;
  &lt;/xsd:complexType&gt;
  &lt;xsd:complexType name="bookType"&gt;
   &lt;xsd:sequence&gt;
     &lt;xsd:element name="title" type="xsd:string" /&gt;
     &lt;xsd:element name="author" type="authorName" /&gt;
     &lt;xsd:element name="price" type="xsd:decimal" /&gt;
   &lt;/xsd:sequence&gt;
   &lt;xsd:attribute name="genre" type="xsd:string" /&gt;
   &lt;xsd:attribute name="publicationdate" type="xsd:string" /&gt;
   &lt;xsd:attribute name="ISBN" type="xsd:string" /&gt;
  &lt;/xsd:complexType&gt;
  &lt;xsd:complexType name="authorName"&gt;
   &lt;xsd:sequence&gt;
     &lt;xsd:element name="first-name" type="xsd:string" /&gt;
     &lt;xsd:element name="last-name" type="xsd:string" /&gt;
   &lt;/xsd:sequence&gt;
  &lt;/xsd:complexType&gt;
&lt;/xsd:schema&gt;'
</PRE>
<P>同时也为该 XML 架构注册到的 myCollection 创建了一个新的元数据实体。 </P>
<H4>修改 XML 架构集合</H4>
<P>ALTER XML SCHEMA COLLECTION 语句支持用新的顶层架构组件来扩展 XML 架构,并且还支持将新的 XML 架构注册到 XML 架构集合。下面的示例对此进行了演示。 </P>
<P>例:改变 XML 架构集合</P>
<P>下面的语句显示了如何将具有目标命名空间 http://myDVD 的新 XML 架构添加到 XML 架构集合 myCollection 中:</P><PRE class=codeSample>ALTER XML SCHEMA COLLECTION myCollection ADD
'&lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://myDVD" 
   elementFormDefault="qualified"
  targetNamespace="http://myDVD"&gt;
  &lt;xsd:element name="dvdstore" type="dvdstoreType" /&gt;
  &lt;xsd:complexType name="dvdstoreType"&gt;
   &lt;xsd:sequence maxOccurs="unbounded"&gt;
     &lt;xsd:element name="dvd" type="dvdType" /&gt;
   &lt;/xsd:sequence&gt;
  &lt;/xsd:complexType&gt;
  &lt;xsd:complexType name="dvdType"&gt;
   &lt;xsd:sequence&gt;
     &lt;xsd:element name="title" type="xsd:string" /&gt;
     &lt;xsd:element name="price" type="xsd:decimal" /&gt;
   &lt;/xsd:sequence&gt;
   &lt;xsd:attribute name="genre" type="xsd:string" /&gt;
   &lt;xsd:attribute name="releasedate" type="xsd:string" /&gt;
  &lt;/xsd:complexType&gt;
&lt;/xsd:schema&gt;'
</PRE>
<H4>#p#XML 架构集合的目录视图</H4>
<P>XML 架构集合的 SQL 目录视图允许用户重新构造单独的 XML 架构命名空间的内容。XML 架构集合在目录视图 sys.xml_schema_collections 中枚举。XML 架构集合“sys”由系统定义,并且包含一些预定义的命名空间,这些命名空间可用于所有用户定义的 XML 架构集合,而不必显式地加载它们。该列表包含用于 xml、xs、xsi、fn 和 xdt 的命名空间。 </P>
<P>值得一提的其他两个目录视图是:sys.xml_schema_namespaces,它枚举每个 XML 架构集合中的所有命名空间;sys.xml_components,它枚举每个 XML 架构中的所有 XML 架构组件。 </P>
<P>内置函数 <B>XML_SCHEMA_NAMESPACE() </B>接受关系架构和 XML 架构集合的名称,以及 XML 架构的目标命名空间(可选)。它返回包含该 XML 架构的 XML 数据类型实例。如果目标命名空间参数被省去,那么该内置函数返回的 XML 实例就会包含 XML 架构集合中除预定义 XML 架构以外的所有 XML 架构。 </P>
<P>例:枚举 XML 架构集合中的 XML 命名空间</P>
<P>将下列查询用于 XML 架构集合“myCollection”:</P><PRE class=codeSample>SELECT XSN.name
FROM    sys.xml_schema_collections XSC 
 JOIN sys.xml_schema_namespaces XSN ON 
(XSC.xml_collection_id = XSN.xml_collection_id)
WHERE    XSC.name = 'myCollection'   
</PRE>
<P>例:从 XML 架构集合输出指定的 XML 架构</P>
<P>下面的语句从(关系)架构 dbo 中的 XML 架构集合“myCollection”输出带有目标命名空间 http://myBooks 的 XML 架构。</P><PRE class=codeSample>SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection', 
N'http://myBooks')
</PRE>
<H4>对 XML 架构集合的访问控制</H4>
<P>通过使用 SQL Server 2005 的安全模型,可以像任何 SQL 对象一样保护 XML 架构集合。您可以授予用户在数据库中创建 XML 架构集合的特权。每个 XML 架构集合都支持 ALTER、CONTROL、TAKE OWNERSHIP、REFERENCES、EXECUTE 和 VIEW DEFINITION 等权限。</P>
<P>执行 ALTER XML SCHEMA COLLECTION 语句需要 ALTER 权限。 </P>
<P>如果要通过执行 ALTER AUTHORIZATION 语句将 XML 架构集合的所有权从一个用户转移到另一个用户,则需要 TAKE OWNERSHIP 权限。 </P>
<P>REFERENCES 权限授权用户在任何需要架构绑定的地方使用 XML 架构,例如,类型化或约束 XML 列和参数。 </P>
<P>要检查用户针对 XML 架构集合插入或更新的值的有效性,则需要 EXECUTE 权限。使用 XML 数据类型从类型化的 XML 列、变量和参数查询值也需要此权限。 </P>
<P>VIEW DEFINITION 权限允许用户访问目录视图中与 XML 架构集合(所有的 XML 架构都包含其中)对应的行,所有 XML 架构组件都包含在这些 XML 架构中。 </P>
<P>CONTROL 权限授予用户执行 XML 架构集合中任何操作的权限,包括使用 DROP XML SCHEMA COLLECTION 语句撤消 XML 架构集合。这意味着具有 XML 架构集合的其他权限。</P>
<P>除了表或 XML 列中的其他权限以外,还需要 XML 架构集合的权限。用户需要权限来创建表,并且还需要 XML 架构集合 C 中的 REFERENCES 权限来创建包含 XML 列 X(按照 C 类型化)的表 T。具有将数据插入列 X 的权限的用户可以这样做,前提是用户具有 XML 架构集合 C 中的 EXECUTE 权限。类似地,要使用 XML 数据类型方法来查询列 X 中的数据,用户需要列 X 中的 SELECT 权限和列 C 中的 EXECUTE 权限。然而,对于从列 X 检索整个 XML 值,列 X 中的 SELECT 权限就足够了,例如 SELECT X FROM T 或 SELECT * FROM T。</P>
<P>可以从用户撤回权限,还可以通过 SQL Server 2005 的安全模型拒绝用户的权限,正如允许其拥有权限一样。</P>
<H4>目录视图的可视化</H4>
<P>XML 架构集合中具有 ALTER、TAKE OWNERSHIP、REFERENCES、VIEW DEFINITION 或 CONTROL 权限的用户可以在目录视图中访问 XML 架构集合的行及其所包含的 XML 架构和它们的 XML 架构组件。该主体还可以通过使用内置函数 XML_SCHEMA_NAMESPACE() 来访问 XML 模式集合的内容。</P>
<P>如果用户的 VIEW DEFINITION 权限被拒绝,则该用户就不能在目录视图中或通过使用 XML_SCHEMA_NAMESPACE() 访问 XML 架构集合。</P>
<H3>对 FOR XML 的增强 </H3>
<P>可以将 TYPE 指令生成的 XML 数据类型实例分配给 XML 列、变量或参数,或者使用 XML 数据类型方法对其进行查询。这使得可以嵌套 SELECT ...FOR XML TYPE 语句。</P>
<P>PATH 模式允许用户指定需要出现列值的 XML 树中的路径,并且与上述嵌套一起使用时更易于编写(与 FOR XML EXPLICIT 相比),不过,它也不可用于深层次。 </P>
<P>与 ELEMENTS 一起使用的指令 XSINIL 可以将 NULL 映射为具有属性 xsi:nil="true" 的元素。新

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -