使用 sql:overflow-field 检索未用完的数据(XDR 架构)
重要提示 |
---|
本主题是针对早期应用程序提供的参考,以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能,而应使用带批注的 XSD 架构来创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)。 |
使用 OPENXML 从 XML 文档在数据库中插入记录时,源 XML 文档中所有未用完的数据可以存储在列中。使用带批注的架构从数据库中检索数据时,可以指定 sql:overflow-field 属性来标识表中存储溢出数据的列。
可以通过以下方式检索此数据:
将在溢出列中存储的属性添加到包含 sql:overflow-field 批注的元素。
将数据库的溢出列中存储的子元素及其后代作为子元素添加,后跟在架构中显式指定的内容(顺序被打乱)。
示例
若要创建使用以下示例的工作示例,必须满足某些要求。有关详细信息,请参阅运行 SQLXML 示例的要求。
A. 在 XDR 架构中为 <ElementType> 指定 sql:overflow-field
该示例假定 tempdb 数据库中已存在此表:
USE tempdb
CREATE TABLE Customers2 (
CustomerID VARCHAR(10),
ContactName VARCHAR(30),
AddressOverflow NVARCHAR(500))
GO
INSERT INTO Customers2 VALUES (
'ALFKI',
'Joe',
'<Address>
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Address>')
GO
在此示例中,映射架构检索 Customers2 表的 AddressOverflow 列中存储的未用完数据。为 <ElementType> 指定 sql:overflow-field 属性。
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customers2" sql:overflow-field="AddressOverflow" >
<AttributeType name="CustomerID" />
<AttributeType name="ContactName" />
<attribute type="CustomerID" />
<attribute type="ContactName"/>
</ElementType>
</Schema>
针对该架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。将该文件另存为 OverflowXdr.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 OverflowXdr.xml 的相同目录中将文件另存为 OverflowXdrT.xml。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="OverflowXdr.xml"> Customers2 </sql:xpath-query> </ROOT>
为映射架构 (OverflowXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:
mapping-schema="C:\MyDir\OverflowXdr.xml"
创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。
有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询。
下面是结果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers2 CustomerID="ALFKI" ContactName="Joe">
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Customers2>
</ROOT>