Я хочу прочитать ContactId и заметки из приведенного ниже XML. Я попытался использовать Openxml и объявить пространство имен, но не смог получить ожидаемый результат. Просим вас предоставить решение.
<ArrayOfContact xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Contact> <ContactId xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">100</ContactId> <Notes xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">Test1</Notes> </Contact> <Contact> <ContactId xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">101</ContactId> <Notes xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">Test2</Notes> </Contact> </ArrayOfContact>
Функция OPENXML - это устаревшая поддержка XML для SQL Server 2000, я бы использовал более новые методы XML, представленные в типе данных xml.
OPENXML
xml
DECLARE @x xml; SET @x = '<ArrayOfContact xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Contact> <ContactId xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">100</ContactId> <Notes xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">Test1</Notes> </Contact> <Contact> <ContactId xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">101</ContactId> <Notes xmlns="http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData">Test2</Notes> </Contact> </ArrayOfContact>'; WITH XMLNAMESPACES ('http://www.thomsonreuters.com/2011/02/25/CMS/CmsService/ContactData' AS cms) SELECT contact.value('cms:ContactId[1]', 'int') ContactId, contact.value('cms:Notes[1]', 'nvarchar(MAX)') Notes FROM @x.nodes('/ArrayOfContact/Contact') AS contacts(contact);