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

Traduzione articoli Traduzione articoli
Identificativo articolo: 914638 - Visualizza i prodotti a cui si riferisce l?articolo.
Bug #: 20011171 (SQLBUDT)
Espandi tutto | Chiudi tutto

In questa pagina

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> XML
    GO
    
  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>
    GO
    
    CREATE 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:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

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>'
    go
    
    create table xml_test (pk int primary key identity(1,1), xmlcol xml(myschema))
    go
    
    insert xml_test values ('
    <ElementName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="newct" bar="10">30</ElementName>')
    go
    
    insert xml_test values ('
    <ElementName>30</ElementName>')
    go
    
    select 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:
30
30

Riferimenti

Per ulteriori informazioni sulla funzione dei dati per XQuery, visitare il seguente sito Web MSDN (informazioni in lingua inglese):
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Proprietà

Identificativo articolo: 914638 - Ultima modifica: giovedì 6 aprile 2006 - Revisione: 2.3
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Chiavi: 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com