Wenn Sie XQuery verwenden, um den Wert eines XML-Elements in SQL Server 2005 abzurufen, zeigen Sie einen Nullwert an

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 914638 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Ob # Fehler: 20011171 (SQLBUDT)
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Sie empfangen einen Nullwert, um den Wert eines XML-Elements abzurufen, wenn die folgenden Bedingungen erfüllt sind, verwenden Sie XQuery wann:
  • Das XML-Element wird als ein komplexer Typ deklariert, der in der zugehörigen Schemadefinition einfachen Inhalt hat.
  • Der Wert des Mischen Attributs der XML-Elementdeklaration in der zugehörigen Schemadefinition ist True.
  • Indem verwenden die Daten Funktion Sie, um den Wert des XML-Elements abzurufen.

Ursache

Dieses Problems wird dadurch verursacht, dass der Wert eines XML-Elements als ein Inline-Wert für das XML-Element verarbeitet wird, wenn als ein komplexer Typ, die einfachen Inhalt hat und mischte, das XML-Element Inhalt deklariert wird. Daher kann den typisierten Wert des XML-Elements die Daten Funktion nicht abrufen. Der Wert des XML-Elements wird normalerweise als dem typisierte Wert des Kinds des XML-Elements verarbeitet.

Lösung

Service Pack-Information

Installieren Sie den neusten Service Pack für Microsoft SQL Server 2005, um dieses Problem zu beheben. Klicken Sie auf die folgende Artikelanzahl, um weitere Informationen zu erhalten, um den Artikel der Microsoft Knowledge Base zu lesen:
913089 Wie Installieren des neusten Service Pack für SQL Server 2005

Abhilfe

Gehen Sie folgendermaßen vor, um dieses Problem umzugehen:
  1. Sie müssen die Spalte der Tabelle die Spalte von bestätigt von der problematischen XML-Schemaauflistung seinen Dateneintrag hat, ändern. Diese Tabellenspalte muss in der nicht typisierten XML-Spalte in der typisierten XML-Spalte geändert werden. Verwenden Sie dazu eine Transact-SQL-Anweisung, die folgend ähnelt:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Löschen Sie die vorhandene XML-Schemaauflistung. Erstellen Sie eine neue XML-Schemaauflistung, die die gleiche Definition als das alte XML-Schema aufweist, anschließend, außer dass der Wert des Mischen Attributs der XML-Elementdeklaration auf False festgelegt wird. Verwenden Sie dazu eine Transact-SQL-Anweisung, die folgend ähnelt:
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N?<NewSchemaDefinition>?
    GO
    
  3. Setzen Sie die Tabellenspalte auf der typisierten XML-Spalte zurück, die gegen der neuen XML-Schemaauflistung validiert. Verwenden Sie dazu eine Transact-SQL-Anweisung, die folgend ähnelt:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Notiz&lt;TableName&gt; stellt den Name der Tabelle dar. &lt;ColumnName&gt; stellt den Name der XML-Tabellenspalte dar. &lt;OldSchemaName&gt; stellt den Name der problematischen alten Schemaauflistung dar. &lt;NewSchemaName&gt; stellt den Name der neuen Schemasammlung dar. &lt;NewSchemaDefinition&gt; stellt den Code dar, der die neue Schemasammlung definiert.

Status

Microsoft hat bestätigt, dass es sich dabei, um ein Problem bei den Microsoft-Produkten, die in dem Abschnitt "Betrifft" aufgeführt sind, handelt. Dieses Problem wurde erstmals in Microsoft SQL Server 2005 Service Pack 1 behoben.

Weitere Informationen

Bei einem komplexen Typen, der über einfachen Inhalt verfügt, empfehlen wir nicht, dass Sie den Wert des Mischen Attributs des komplexen Typen auf True festlegen. Die Spezifikation auf den XML-Schemastrukturen, die auf der W3C-Website verfügbar ist, erläutert außerdem dieses Problem. Abschnitt in der folgenden Website für Weitere Informationen, siehe das "3.4.3" für Abschnitt und für das "3.4.4":
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Schritte zu Reproduzieren des Problems

  1. Öffnen Sie SQL Server 2005 Management Studio.
  2. Stellen Sie eine Verbindung zu einer Instanz von SQL Server her.
  3. Erweitern Sie Datenbanken, und klicken Sie dann auf eine Datenbank, die Sie ändern möchten.
  4. Klicken Sie in dem Menü Datei auf Neu, und klicken Sie dann auf Database Engine Query. Das Editor Abfrage-Fenster wird geöffnet.
  5. Fügen Sie das folgende Codebeispiel in dem Abfrage-Fenster Editor ein:
    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
    
Die Ausgabe ähnelt folgend:
<empty>
30
Notiz in dieser <leeren> Ausgabe gibt an, dass kein angezeigt wird.

Jedoch wird erwartet, die Ausgabe folgend zu ähneln:
30
30

Informationsquellen

Findet mehreres Weitere Informationen für XQuery zu der Funktion Daten auf der folgenden Microsoft Developer Network ( MSDN )-Website:
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Eigenschaften

Artikel-ID: 914638 - Geändert am: Donnerstag, 6. April 2006 - Version: 2.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Keywords: 
kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtde kbmt
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 914638
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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