Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Um atributo pode ser especificado como um atributo de tipo ID. Atributos especificados como IDREF ou IDREFS podem então ser usados para se referir aos atributos do tipo ID, permitindo ligações entre documentos.
ID, IDREF e IDREFS correspondem a relações PK/FK (chave primária/chave estrangeira) na base de dados, com poucas diferenças. Num documento XML, os valores dos atributos do tipo ID devem ser distintos. Se os atributos CustomerID e OrderID forem especificados como tipo ID num documento XML, estes valores devem ser distintos. No entanto, numa base de dados, as colunas CustomerID e OrderID podem ter os mesmos valores. (Por exemplo, CustomerID = 1 e OrderID = 1 são válidos na base de dados).
Para que os atributos ID, IDREF e IDREFS sejam válidos:
O valor do ID deve ser único dentro do documento XML.
Para cada IDREF e IDREFS, os valores de ID referenciados devem estar no documento XML.
O valor de um ID, IDREF e IDREFS deve ser um token nomeado. (Por exemplo, o valor inteiro 101 não pode ser um valor ID.)
Os atributos do tipo ID, IDREF e IDREFS não podem ser mapeados para colunas do tipo texto, ntext, imagem ou qualquer outro tipo de dado binário (por exemplo, carimbo temporal).
Se um documento XML contiver múltiplos IDs, use a anotação sql:prefixo para garantir que os valores são únicos.
Note que a anotação sql:prefix não pode ser usada com o atributo fixo XSD.
Examples
Para criar exemplos funcionais usando os seguintes exemplos, deve cumprir certos requisitos. Para mais informações, consulte Requisitos para Executar Exemplos de SQLXML.
A. Especificação dos tipos de ID e IDREFS
No esquema seguinte, o <elemento Cliente> consiste no <elemento filho da Ordem> . O <elemento Order> também tem um elemento filho, o <elemento OrderDetail> .
O atributo OrderIDList do <Cliente> é um atributo do tipo IDREFS que se refere ao atributo OrderID do <elemento Ordem> .
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
<sql:relationship name="OrderOrderDetail"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OrderDetail"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOrderDetail"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:string" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID"
type="xsd:ID" sql:prefix="ord-" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS"
sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID"
sql:relationship="CustOrders" sql:prefix="ord-">
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Para testar uma consulta XPath de exemplo contra o esquema
Copie o código do esquema acima e cole num ficheiro de texto. Guarde o ficheiro como sqlPrefix.xml.
Copie o modelo seguinte e cole-o num ficheiro de texto. Guarda o ficheiro como sqlPrefixT.xml no mesmo diretório onde guardaste sqlPrefix.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlPrefix.xml"> /Customer[@CustomerID=1] </sql:xpath-query> </ROOT>O caminho do diretório especificado para o esquema de mapeamento (sqlPrefix.xml) é relativo ao diretório onde o modelo é guardado. Um caminho absoluto também pode ser especificado, por exemplo:
mapping-schema="C:\SqlXmlTest\sqlPrefix.xml"Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para mais informações, consulte Utilização de ADO para Executar Consultas SQLXML.
Este é o resultado parcial:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" OrderIDList="ord-43860 ord-44501 ord-45283 ord-46042">
<Order SalesOrderID="ord-43860" OrderDate="2001-08-01" CustomerID="1">
<OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />
...
</Order>
...
</Customer>
</ROOT>