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
Num esquema XSD, o atributo xsd:type especifica o tipo de dado XSD de um elemento ou atributo. Quando um esquema XSD é usado para extrair dados da base de dados, o tipo de dado especificado é usado para formatar os dados.
Para além de especificar um tipo XSD num esquema, pode também especificar um tipo de dado do Microsoft SQL Server usando a anotação sql:datatype . Os atributos xsd:type e sql:datatype controlam o mapeamento entre os tipos de dados XSD e os tipos de dados SQL Server.
Atributo xsd:type
Pode usar o atributo xsd:type para especificar o tipo de dado XML de um atributo ou elemento que corresponde a uma coluna. O xsd:type afeta o documento que é devolvido pelo servidor e também a consulta XPath que é executada. Quando uma consulta XPath é executada contra um esquema de mapeamento que contém xsd:type, o XPath utiliza o tipo de dado especificado ao processar a consulta. Para mais informações sobre como o XPath utiliza xsd:type, veja Mapear Tipos de Dados XSD para Tipos de Dados XPath (SQLXML 4.0).
Num documento devolvido, todos os tipos de dados do SQL Server são convertidos em representações de strings. Alguns tipos de dados requerem conversões adicionais. A tabela seguinte lista as conversões usadas para vários valores xsd:type .
| Tipo de dados XSD | Conversão SQL Server |
|---|---|
| booleano | CONVERT(bit, COLUMN) |
| Date | ESQUERDA(CONVERTER(nvarchar(4000), COLUNA, 126), 10) |
| decimal | CONVERT (dinheiro, COLUMN) |
| id/idref/idrefs | id-prefixo + CONVERT(nvarchar(4000), COLUMN, 126) |
| nmtokens/nmtokens | id-prefixo + CONVERT(nvarchar(4000), COLUMN, 126) |
| Time | SUBSTRING(CONVERT(nvarchar(4000), COLUMN, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), COLUMN, 126)), 24) |
| Todos os outros | Sem conversão adicional |
Observação
Alguns dos valores devolvidos pelo SQL Server podem não ser compatíveis com os tipos de dados XML especificados ao usar xsd:type, seja porque a conversão não é possível (por exemplo, converter "XYZ" para um tipo de dado decimal ) ou porque o valor excede o intervalo desse tipo de dado (por exemplo, -100000 convertido para um tipo UnsignedShort XSD). Conversões de tipos incompatíveis podem resultar em documentos XML que não são válidos, ou em erros do SQL Server.
Mapeamento de Tipos de Dados SQL Server para Tipos de Dados XSD
A tabela seguinte mostra um mapeamento óbvio dos tipos de dados SQL Server para os tipos de dados XSD. Se souber o tipo SQL Server, esta tabela fornece o tipo XSD correspondente que pode especificar no esquema XSD.
| Tipo de dados do SQL Server | Tipo de dados XSD |
|---|---|
| bigint | Longo |
| binary | base64Binary |
| bit | booleano |
| char | string |
| datetime | dateTime |
| decimal | decimal |
| float | duplo |
| image | base64Binary |
| int | int |
| dinheiro | decimal |
| Nchar | string |
| ntext | string |
| nvarchar | string |
| numérico | decimal |
| real | float |
| smalldatetime | dateTime |
| smallint | Short |
| dinheiro pequeno | decimal |
| sql_variant | string |
| sysname | string |
| texto | string |
| timestamp | dateTime |
| tinyint | unsignedByte |
| Varbinary | base64Binary |
| Varchar | string |
| uniqueidentifier | string |
sql:datatype Anotação
A anotação sql:datatype é usada para especificar o tipo de dado SQL Server; Esta anotação deve ser especificada quando:
Está a carregar em massa uma coluna dataHorado SQL Server a partir de um tipo de dataHora, data ou hora XSD. Neste caso, deve identificar o tipo de dado da coluna do SQL Server usando sql:datatype="dateTime". Esta regra também se aplica aos updategrams.
Está a carregar em massa numa coluna do tipo de identificador único do SQL Server e o valor XSD é um GUID que inclui colchetes ({ e }). Quando especifica sql:datatype="uniqueidentifier", as chaves são removidas do valor antes de este ser inserido na coluna. Se sql:datatype não for especificado, o valor é enviado com os colchetes, e a inserção ou atualização falha.
O tipo de dados XML base64Binary corresponde a vários tipos de dados do SQL Server (binário, imagem ou varbinário). Para mapear o tipo de dado XML base64Binary para um tipo de dado SQL Server específico, use a anotação sql:datatype . Esta anotação especifica o tipo de dado SQL Server explícito da coluna para a qual o atributo corresponde. Isto é útil quando os dados estão a ser armazenados nas bases de dados. Ao especificar a anotação sql:datatype , pode identificar o tipo de dado SQL Server explícito.
É geralmente recomendado que especifique sql:datatype no esquema.
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. Especificar xsd:type
Este exemplo mostra como um tipo de data XSD especificado usando o atributo xsd:type no esquema afeta o documento XML resultante. O esquema fornece uma vista XML da tabela Sales.SalesOrderHeader na base de dados AdventureWorks.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader">
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:string" />
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="DueDate" />
<xsd:attribute name="ShipDate" type="xsd:time" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Neste esquema XSD, existem três atributos que devolvem um valor de data do SQL Server. Quando o esquema:
Especifica xsd:type=date no atributo OrderDate , a parte de data do valor devolvida pelo SQL Server para o atributo OrderDate é exibida.
Especifica xsd:type=time no atributo ShipDate , a parte do tempo do valor que é devolvida pelo SQL Server para o atributo ShipDate é exibida.
Não especifica xsd:type no atributo DueDate , o mesmo valor que é devolvido pelo SQL Server é exibido.
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 xsdType.xml.
Copie o modelo seguinte e cole-o num ficheiro de texto. Guarda o ficheiro como xsdTypeT.xml no mesmo diretório onde guardaste xsdType.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="xsdType.xml"> /Order </sql:xpath-query> </ROOT>O caminho do diretório especificado para o esquema de mapeamento (xsdType.xml) é relativo ao diretório onde o modelo é guardado. Um caminho absoluto também pode ser especificado, por exemplo:
mapping-schema="C:\SqlXmlTest\xsdType.xml"Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.
Aqui está o conjunto de resultados parciais:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43659"
CustomerID="676"
OrderDate="2001-07-01"
DueDate="2001-07-13T00:00:00"
ShipDate="00:00:00" />
<Order SalesOrderID="43660"
CustomerID="117"
OrderDate="2001-07-01"
DueDate="2001-07-13T00:00:00"
ShipDate="00:00:00" />
...
</ROOT>
Este é o esquema XDR equivalente:
<?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="Order" sql:relation="Sales.SalesOrderHeader">
<AttributeType name="SalesOrderID" />
<AttributeType name="CustomerID" />
<AttributeType name="OrderDate" dt:type="date" />
<AttributeType name="DueDate" />
<AttributeType name="ShipDate" dt:type="time" />
<attribute type="SalesOrderID" sql:field="OrderID" />
<attribute type="CustomerID" sql:field="CustomerID" />
<attribute type="OrderDate" sql:field="OrderDate" />
<attribute type="DueDate" sql:field="DueDate" />
<attribute type="ShipDate" sql:field="ShipDate" />
</ElementType>
</Schema>
B. Especificação do tipo de dado SQL usando sql:datatype
Para um exemplo de trabalho, veja o Exemplo G em Exemplos de Carregamento em Massa XML (SQLXML 4.0). Neste exemplo, um valor GUID incluindo "{" e "}" é carregado em massa. O esquema neste exemplo especifica sql:datatype para identificar o tipo de dado SQL Server como identificador único. Este exemplo ilustra quando o tipo sql:datatype deve ser especificado no esquema.