Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Este exemplo ilustra como são tratados os dados na coluna de estouro usando a diretiva XMLTEXT numa declaração SELECT em modo EXPLICIT.
Considere a Person tabela. Esta tabela tem uma Overflow coluna que armazena a parte não consumida do documento XML.
USE tempdb;
GO
CREATE TABLE Person(PersonID varchar(5), PersonName varchar(20), Overflow nvarchar(200));
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P">content</SomeTag>');
Esta consulta recupera colunas da Person tabela. Para a Overflow coluna, AttributeName não está especificado, mas a diretiva é definida como XMLTEXT como parte do fornecimento de um nome universal para a coluna da tabela.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- No AttributeName; XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
No documento XML resultante:
Como AttributeName não é especificado para a
Overflowcoluna e axmltextdiretiva é especificada, os<overflow>atributos no elemento são acrescentados à lista de atributos do elemento de delimitação<Parent>.Como o atributo
PersonIDno elemento<xmltext>entra em conflito com o atributoPersonIDrecuperado no mesmo nível de elemento, o atributo no elemento<xmltext>é ignorado, mesmo quePersonIDseja NULL. Geralmente, um atributo substitui um atributo do mesmo nome no transbordo.
Este é o resultado:
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">content</Parent>
Se os dados de estouro tiverem subelementos e a mesma consulta for especificada, os subelementos na coluna Overflow serão adicionados como subelementos do elemento circundante <Parent>.
Por exemplo, altere os Person dados na tabela para que a Overflow coluna agora tenha subelementos.
USE tempdb;
GO
TRUNCATE TABLE Person;
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P"><name>PersonName</name></SomeTag>');
Se a mesma consulta for executada, os subelementos no <xmltext> elemento serão adicionados como subelementos do elemento de delimitação <Parent> :
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- no AttributeName, XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
Este é o resultado:
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">
<name>PersonName</name>
</Parent>
Se AttributeName for especificado com a xmltext diretiva, os <overflow> atributos do elemento serão adicionados como atributos dos subelementos do elemento de delimitação <Parent> . O nome especificado para AttributeName torna-se o nome do subelemento
Nesta consulta, AttributeName, <overflow>, é especificado juntamente com a xmltext diretiva *:*
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!overflow!XMLTEXT] -- Overflow is AttributeName
-- XMLTEXT is a directive
FROM Person
FOR XML EXPLICIT;
Este é o resultado:
<Parent PersonID="P1" PersonName="Joe">
<overflow attr1="data">content</overflow>
</Parent>
<Parent PersonID="P2" PersonName="Joe">
<overflow attr2="data" />
</Parent>
<Parent PersonID="P3" PersonName="Joe">
<overflow attr3="data" PersonID="P">
<name>PersonName</name>
</overflow>
</Parent>
Neste elemento de consulta, diretiva é especificada para PersonName atributo. Isso resulta em PersonName ser adicionado como um subelemento do elemento de inclusão <Parent> . Os atributos do <xmltext> ainda são anexados ao elemento de encerramento <Parent> . O conteúdo do elemento <overflow>, incluindo os seus subelementos, é adicionado antes dos outros subelementos dos elementos que envolvem <Parent>.
SELECT 1 AS Tag, NULL as parent,
PersonID AS [Parent!1!PersonID],
PersonName AS [Parent!1!PersonName!element], -- element directive
Overflow AS [Parent!1!!XMLTEXT]
FROM Person
FOR XML EXPLICIT;
Este é o resultado:
<Parent PersonID="P1" attr1="data">content<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P2" attr2="data">
<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P3" attr3="data">
<name>PersonName</name>
<PersonName>Joe</PersonName>
</Parent>
Se os dados da XMLTEXT coluna contiverem atributos no elemento raiz, esses atributos não serão mostrados no esquema de dados XML e o analisador MSXML não validará o fragmento de documento XML resultante. Por exemplo:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Este é o resultado. No esquema retornado, o atributo a overflow está ausente do esquema:
<Schema name="Schema2"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="overflow" content="mixed" model="open">`
</ElementType>`
</Schema>`
<overflow xmlns="x-schema:#Schema2" a="1">
</overflow>