Při použití XQuery načíst hodnotu prvek XML SQL Server 2005 se zobrazí hodnota NULL

Překlady článku Překlady článku
ID článku: 914638 - Produkty, které se vztahují k tomuto článku.
Chyba č: 20011171 (SQLBUDT)
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Zobrazí hodnotu NULL při použití XQuery načíst hodnotu prvek XML, když jsou splněny následující podmínky:
  • Prvek XML je deklarován jako komplexní typ, který má jednoduchý obsah definice přidružené schématu.
  • Smíšené atribut deklarace prvku XML v definici schématu přidružené hodnotu true.
  • Použijte funkci data načíst hodnotu prvek XML.

Příčina

K tomuto problému dochází, protože hodnota prvek XML je zpracován jako hodnota vložené do prvku XML při prvek XML je deklarován jako komplexní typ, který má jednoduchý obsah a kombinovaného obsahu. Funkce dat tedy nelze načíst zadaný hodnotu prvek XML. Obvykle hodnotu prvek XML je zpracován jako zadanou hodnotu podřízený prvek XML.

Řešení

Informace o aktualizaci Service Pack

Chcete-li tento problém vyřešit, získejte nejnovější aktualizace service pack pro Microsoft SQL Server 2005. Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
913089Jak získat nejnovější aktualizaci service pack pro SQL Server 2005

Jak potíže obejít

Chcete-li tento problém vyřešit, postupujte takto:
  1. Musíte změnit sloupec tabulky má jeho zadávání dat ověřen podle problematické kolekci schématu XML. Tento sloupec tabulky musí být změněn z zadaný sloupec XML na netypovou sloupec XML. Pomocí příkazu Transact-SQL, která je podobná následující:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Přetažení existující kolekci schématu XML. Pak vytvořte nové kolekce schématu XML, který má stejné definice jako původní schéma XML s tím rozdílem, že hodnota smíšené atribut prvku deklarace XML je nastavena na hodnotu false. Pomocí příkazu Transact-SQL, která je podobná následující:
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N’<NewSchemaDefinition>’
    GO
    
  3. Nastavit sloupce tabulky zadaný sloupec XML, který ověřuje proti nové kolekce schématu XML. Pomocí příkazu Transact-SQL, která je podobná následující:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Poznámka:<TableName> představuje název tabulky. <ColumnName> představuje název sloupce tabulky XML. <OldSchemaName> představuje název kolekce staré problematické schématu. <NewSchemaName> představuje název nové kolekce schématu. <NewSchemaDefinition> představuje kód definuje nové kolekce schématu.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt. Tento problém byl poprvé opraven v Microsoft SQL Server 2005 Service Pack 1.

Další informace

Pro komplexní typ, který má jednoduchý obsah nedoporučujeme nastavit hodnotu smíšené atribut komplexní typ na hodnotu true. Specifikace na struktur schématu XML, která je k dispozici na webu webu Consortium (W3C) také popisuje tento problém. Další informace viz "3.4.3" část a "3.4.4" oddílu na následujícím webu:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Postup reprodukce problému

  1. Otevřete SQL Server 2005 Management Studio.
  2. Připojit k instanci serveru SQL.
  3. Rozbalte databáze a klepněte na databázi, kterou chcete upravit.
  4. V nabídce soubor přejděte na příkaz Nový a potom klepněte na příkaz Databázový stroj dotaz. Zobrazí se okno Editor dotazů.
  5. Vložit následující příklad kódu v okně Query Editor:
    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
    
Výstup je podobná následující:
<empty>
30
Poznámka V tento výstup <empty>označuje nic zobrazí.

Však výstup je očekáváno podobná následující:
30
30

Odkazy

Další informace o funkci data XQuery na webu Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Vlastnosti

ID článku: 914638 - Poslední aktualizace: 6. dubna 2006 - Revize: 2.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Klíčová slova: 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:914638

Dejte nám zpětnou vazbu

 

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