Viene visualizzato un valore NULL quando si utilizza XQuery per recuperare il valore di un elemento XML in SQL Server 2005

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 914638
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Bug #: 20011171 (SQLBUDT)
Sintomi
Viene visualizzato un valore NULL quando si utilizza XQuery per recuperare il valore di un elemento XML quando sono vere le seguenti condizioni:
  • L'elemento XML viene dichiarato come un tipo complesso che dispone di contenuto semplice nella definizione dello schema associato.
  • Il valore dell'attributo della dichiarazione dell'elemento XML nella definizione dello schema associato misto è true .
  • La funzione di dati consente di recuperare il valore dell'elemento XML.
Cause
Questo problema si verifica perché il valore di un elemento XML viene elaborato come un valore di in linea per l'elemento XML quando l'elemento XML viene dichiarata come un tipo complesso con contenuto semplice e misto contenuto. Di conseguenza, la funzione di dati è in non è in grado di recuperare il tipizzato valore dell'elemento XML. In genere, il valore dell'elemento XML viene elaborato come il valore tipizzato dell'elemento figlio dell'elemento XML.
Risoluzione

Informazioni sul Service pack

Per risolvere il problema, ottenere il service pack più recente per Microsoft SQL Server 2005. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
913089Come ottenere il service pack più recente per SQL Server 2005
Workaround
Per aggirare questo problema, attenersi alla seguente procedura:
  1. È necessario modificare la colonna della tabella che include la voce dati convalidati rispetto a insieme di schemi XML problematico. Questa colonna di tabella è necessario modificare dalla colonna XML tipizzata alla colonna XML non tipizzato. A tal fine, utilizzare un'istruzione simile al seguente:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XMLGO
  2. Eliminare l'insieme di schemi XML esistente. Quindi creare un nuovo insieme di schemi XML con la stessa definizione lo schema XML precedente, ma il valore dell'attributo misto di dichiarazione di elemento XML è impostato su false . A tal fine, utilizzare un'istruzione simile al seguente:
    DROP XML SCHEMA COLLECTION <OldSchemaName>GOCREATE XML SCHEMA COLLECTION <NewSchemaName> AS N’<NewSchemaDefinition>’GO
  3. Reimpostare la colonna della tabella su della colonna XML tipizzata che convalida a fronte del nuovo insieme di schemi XML. A tal fine, utilizzare un'istruzione simile al seguente:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)GO
Nota <TableName> rappresenta il nome della tabella. <ColumnName> rappresenta il nome della colonna della tabella XML. <OldSchemaName> rappresenta il nome dell'insieme di schemi problematico precedente. <NewSchemaName> rappresenta il nome del nuovo insieme di schemi. <NewSchemaDefinition> rappresenta il codice che definisce il nuovo insieme di schemi.
Status
Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a". Questo problema è stato innanzitutto corretto in SQL Server 2005 Service Pack 1.
Informazioni
Per un tipo complesso con contenuto semplice, non è consigliabile impostare il valore dell'attributo del tipo complesso misto su true . La specifica sulle strutture di schema XML, disponibile sul sito Web di World Wide Web Consortium (W3C) vengono inoltre illustrate questo problema. Per ulteriori informazioni, vedere "3.4.3" la sezione e "3.4.4" sezione il seguente sito Web:

Procedura per riprodurre il problema

  1. Aprire SQL Server 2005 Management Studio.
  2. Connettersi a un'istanza di SQL Server.
  3. Espandere database e quindi scegliere un database che si desidera modificare.
  4. Scegliere Nuovo dal menu file , quindi Query motore di database . Verrà visualizzata la finestra Editor di query .
  5. Incollare nell'esempio di codice riportato di seguito nella finestra del Editor di query :
    create xml schema collection myschema as N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">	<xs:element name="ElementName" type="xs:integer" />			<xs:complexType name="newct" mixed="true">		<xs:simpleContent>			<xs:extension base="xs:integer">				<xs:attribute name="bar" type="xs:integer" />			</xs:extension>		</xs:simpleContent>	</xs:complexType></xs:schema>'gocreate table xml_test (pk int primary key identity(1,1), xmlcol xml(myschema))goinsert xml_test values ('<ElementName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="newct" bar="10">30</ElementName>')goinsert xml_test values ('<ElementName>30</ElementName>')goselect xmlcol.query('data(/ElementName)')from xml_test
L'output è simile al seguente:
<empty>30
Nota In questo output <empty> indica che non è incluso.

Tuttavia, l'output dovrebbe essere analogo al seguente:
3030
Riferimenti
Per ulteriori informazioni sulla funzione dei dati per XQuery, visitare il seguente sito Web MSDN (informazioni in lingua inglese):

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 914638 - Ultima revisione: 12/09/2015 04:40:48 - Revisione: 2.3

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbnosurvey kbarchive kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtit
Feedback