SQL Server 2005'te bir XML öğesi değerini almak için XQuery kullandığınızda, aldığınız bir NULL değeri

Makale çevirileri Makale çevirileri
Makale numarası: 914638 - Bu makalenin geçerli olduğu ürünleri görün.
# Hata: 20011171 (SQLBUDT)
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

NULL değeri aldığınız XQuery kullandığınızda aşağıdaki koşullar doğru olduğunda, bir <a0>XML</a0> öğesinin değerini almak için:
  • XML öğesi, basit içerik ilişkili bir şema tanımı içinde bulunan bir karmaşık tür olarak bildirildi.
  • Karma ilişkili bir şema tanımı XML öğesi bildiriminde özniteliğinin değeri geçerlidir.
  • XML öğesinin değerini almak için veri işlevini kullanın.

Neden

Bu sorun, XML öğesi içerik basit içerik ve karışık bir karmaşık tür olarak bildirildi, bir <a0>XML</a0> öğesinin değeri XML öğesi için bir satır içi değeri olarak işlenen nedeniyle oluşur. Bu nedenle, veri işlevi <a0>XML</a0> öğesinin değeri yazılan alamıyor. Genellikle <a0>XML</a0> öğesinin değeri yazılan XML öğesi alt değeri olarak işlenir.

Çözüm

Hizmet paketi bilgileri

Bu sorunu gidermek için <a0></a0>, Microsoft SQL Server 2005 için en son hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
913089En son SQL Server 2005 hizmet paketi nasıl elde edilir

Pratik Çözüm

Bu soruna geçici bir çözüm için aşağıdaki adımları izleyin:
  1. Sorunlu XML şema koleksiyonu karşı doğrulandı, veri girişini içeren tablo sütunu değiştirmeniz gerekir. Bu tablo sütunu yazılı XML sütundan türlenmemiş XML sütunu olarak değiştirilmelidir. Bunu yapmak için <a0></a0>, aşağıdakine benzer bir Transact-SQL deyimini kullanın: XML
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Varolan XML şema koleksiyonu bırakın. XML öğe bildirimi ile karma özniteliğinin değeri false ise dışında <a0></a0> eski XML şeması olarak aynı tanıma sahip yeni bir XML şema koleksiyonu sonra oluşturun. Bunu yapmak için <a0></a0>, aşağıdakine benzer bir Transact-SQL deyimini kullanın: <a1>
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N’<NewSchemaDefinition>’
    GO
    
  3. Tablo sütunu yeni XML şema koleksiyonu karşı doğrulayan geri yazılı XML sütun için ayarlayın. Bunu yapmak için <a0></a0>, aşağıdakine benzer bir Transact-SQL deyimini kullanın: <a1>
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Not<TableName> tablonun adını gösterir. <ColumnName> XML tablo sütunun adını gösterir. <OldSchemaName> eski sorunlu şema koleksiyonu adını gösterir. <NewSchemaName> yeni şema koleksiyonu adını gösterir. <NewSchemaDefinition> yeni şema koleksiyonu tanımlayan kod temsil eder.

Durum

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır. Bu sorun ilk olarak Microsoft SQL Server 2005 Service Pack 1'de giderilmiştir.

Daha fazla bilgi

Basit içeriğe sahip bir karmaşık türü için karışık karmaşık tür öznitelik değerinin true olarak ayarlanması önerilmez. XML şema yapıları World Wide Web Konsorsiyumu (W3C) Web sitesinde kullanılabilir belirtimi de bu sorunu incelemektedir. Daha fazla bilgi, bölümüne bakın. "3.4.3" ve "3.4.4" bölümünde, aşağıdaki Microsoft Web sitesi:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Sorunu Yeniden Oluşturma Adımları

  1. SQL Server 2005 Management Studio'yu açın.
  2. SQL Server örneğine bağlanmak.
  3. Veritabanı ' nı genişletin ve sonra değiştirmek istediğiniz veritabanını tıklatın.
  4. Dosya menüsünden Yeni ' nin üzerine gelin ve Veritabanı altyapısı sorgusu</a1>'ı tıklatın. Query Düzenleyicisi penceresi görüntülenir.
  5. Aşağıdaki kod örneği Query Düzenleyici penceresinde yapıştırın:
    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
    
Çıktı, aşağıdakine benzer:
<empty>
30
Hiçbir şey görünmüyor, bu çıktı <empty>Not gösterir.

Ancak, çıktı aşağıdakine benzer olması beklenir:
30
30

Referanslar

XQuery veri işlevi hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Özellikler

Makale numarası: 914638 - Last Review: 6 Nisan 2006 Perşembe - Gözden geçirme: 2.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
Anahtar Kelimeler: 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:914638

Geri Bildirim Ver

 

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