Я импортировал весь XML-файл во временную таблицу с типом данных XML, используя приведенный ниже код
INSERT
INTO import.XMLCompanyDetail
(
XMLData
)
SELECT BulkColumn AS XMLData
FROM OPENROWSET (BULK '\\Server\Dir1\Dir2\Dir3\ExampleXML.xml', SINGLE_BLOB) AS XMLDATA
Однако я стараюсь импортировать только часть данных, пожалуйста.см. ниже пример XML.В идеале я хотел бы выбрать CoNum 123 или CoNum 233 и получить остальные данные в этом элементе.Хотя я предполагаю, что это будет как-то означать то, что мы получим Row Num Num и будем работать оттуда.
<VN>
<CompanyList>
<Row num="1">
<CoNum>123</CoNum>
<CoName>Comp1</CoName>
<DInc>1950-01-06</DInc>
</Row>
<Row num="2">
<CoNum>233</CoNum>
<CoName>Comp2</CoName>
<DInc>1955-11-10</DInc>
<DDis />
</Row>
</CompanyList>
</VN>
, если кто-то может использовать такой синтаксис или указать мне правильное направление, это будет очень цениться.
Также стоит отметить, что в процессе я собираю данные в таблицу позже, но к этому моменту уже поздно, поэтому действительно нужно удалить остальные данные или выбрать только соответствующие данные в этомзапрос или из таблицы import.XMLCompanyDetail.
ОБНОВЛЕНИЕ 1: Нашли эту ссылку http://www.simple -talk.com / sql / t-sql-программирования / xml-data -ification-language-workbench / , которая должна помочь.
ОБНОВЛЕНИЕ 2: Я в конечном итоге кодировал ниже, возможно, не самый элегантный, но, кажется, работает.Потратил добрых десять минут, пытаясь передать переменную через параметр sp_executeSQL, но не смог заставить его работать, поэтому просто выбил нижеприведенное ... добавит QUOTENAME в какой-то момент перед началом работы.
SET @SQL =
N'
UPDATE import.XMLCompanyDetail
SET XMLData.modify(''delete (//VN/CompanyList/Row[@num != ' + CONVERT(VARCHAR,@RowNum) + '])'')
'
EXECUTE SP_EXECUTESQL @SQL