Принимать значение NULL, при использовании XQuery для извлечения значения элемента XML в SQL Server 2005

Переводы статьи Переводы статьи
Код статьи: 914638 - Vizualiza?i produsele pentru care se aplic? acest articol.
Ошибка #: 20011171 (SQLBUDT)
Развернуть все | Свернуть все

В этой статье

Проблема

Принимать значение NULL при использовании XQuery для извлечения значения элемента XML, если выполняются следующие условия:
  • XML-элемент объявлен как составной тип, который имеет простое содержимое в определении связанной схеме.
  • Значениесмешанныеатрибут объявления элемента XML в определении связанной схемыTrue.
  • Можно использоватьDATAфункция извлечения значения элемента XML.

Причина

Данная проблема возникает, если значение элемента XML обрабатывается как значение встроенного элемента XML, когда XML-элемент объявлен как составной тип, который имеет простое содержимое и смешанного содержимого. Таким образомDATAфункция не может получить типизированное значение элемента XML. Как правило значение элемента XML, обрабатывается как типизированное значение потомка элемента XML.

Решение

Сведения о пакете обновления

Чтобы устранить эту проблему, получите последний пакет обновления для Microsoft SQL Server 2005. Для получения дополнительных сведений обратитесь к следующей статье Базы Знаний Майкрософт::
913089Получение последнего пакета обновления для SQL Server 2005

Временное решение

Для обхода проблемы выполните следующие действия.:
  1. Столбец таблицы, с ее ввода данных, проверять проблемных коллекции XML-схем, необходимо изменить. В этом столбце таблицы должны быть изменены в типизированном столбце XML для нетипизированного XML-столбца. Чтобы сделать это, используйте инструкцию Transact-SQL, подобное приведенному ниже:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Удалите существующую коллекцию XML-схем. Затем создайте новую коллекцию схем XML, имеющий то же определение, как со старой схемой XML, за исключением, значениесмешанныеатрибут объявления элемента XMLЛОЖЬ. Чтобы сделать это, используйте инструкцию Transact-SQL, подобное приведенному ниже:
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N’<NewSchemaDefinition>’
    GO
    
  3. Задайте столбец таблицы обратно в типизированном столбце XML, которая проверяет соответствие новой коллекции XML-схем. Чтобы сделать это, используйте инструкцию Transact-SQL, подобное приведенному ниже:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Примечание.<tablename></tablename>представляет имя таблицы.<columnname></columnname>представляет имя XML-столбца таблицы.<oldschemaname></oldschemaname>представляет имя старой коллекции проблемных схемы.<newschemaname></newschemaname>представляет имя новой коллекции схем.<newschemadefinition></newschemadefinition>Представляет код, определяющий новую коллекцию схем.

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Майкрософт, перечисленных в разделе «Применяется к».. Впервые эта проблема была исправлена в SQL Server 2005 с пакетом обновления 1.

Дополнительная информация

Для сложного типа, который имеет простое содержимое, не рекомендуется установить значениесмешанныеатрибутов для сложного типаTrue. Спецификация структуры схемы XML, доступный на веб-узел консорциума World Wide Web (W3C) также обсуждается проблема. Для получения дополнительных сведений, см. раздел «3.4.3» раздела "3.4.4" раздел веб-узла:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Действия по воспроизведению проблемы

  1. Откройте среду SQL Server 2005 Management Studio.
  2. Подключитесь к экземпляру SQL Server.
  3. expandБазы данныхи выберите базу данных, которую требуется изменить.
  4. в менюФайл:Выберите пункт менюСОЗДАТЬ.и выберите командуЗапрос к ядру базы данных. надписьюРедактор запросовПоявится окно.
  5. Вставьте следующий код вРедактор запросовобозревателя.:
    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
    
Получается следующее:
<empty>
30
Примечание.В этом выводе <empty>ничего не появляется.</empty>

Тем не менее результат должен быть следующего вида:
30
30

Ссылки

Для получения дополнительных сведений оDATAфункции языка XQuery, посетите следующий веб-узел Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/ms187038.aspx

Свойства

Код статьи: 914638 - Последний отзыв: 27 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Ключевые слова: 
kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb kbmt KB914638 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:914638

Отправить отзыв

 

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