Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OPENXML и Mater-Detail  [new]
Oleg6619
Member

Откуда:
Сообщений: 441
Добрый день!
Есть XML
  <DictionaryItems>
	<DictionaryItem>
		<OlympicID>1</OlympicID>
		<OlympicName>Олимпиада</OlympicName>
		<Profiles>
			<Profile>
				<Subjects>
					<Subject>
						<SubjectID>0</SubjectID>
					</Subject>
				</Subjects>
				<ProfileID>7</ProfileID>
				<LevelID>0</LevelID>
			</Profile>
			<Profile>
				<Subjects>
					<Subject>
						<SubjectID>0</SubjectID>
					</Subject>
				</Subjects>
				<ProfileID>6</ProfileID>
				<LevelID>0</LevelID>
			</Profile>
		</Profile>
	</DictionaryItem>
<DictionaryItem>
		<OlympicID>2</OlympicID>
		<OlympicName>Олимпиада2</OlympicName>
		<Profiles>
			<Profile>
				<Subjects>
					<Subject>
						<SubjectID>0</SubjectID>
					</Subject>
				</Subjects>
				<ProfileID>71</ProfileID>
				<LevelID>0</LevelID>
			</Profile>
			<Profile>
				<Subjects>
					<Subject>
						<SubjectID>0</SubjectID>
					</Subject>
				</Subjects>
				<ProfileID>61</ProfileID>
				<LevelID>0</LevelID>
			</Profile>
		</Profile>
	</DictionaryItem>
</DictionaryItems>		

Необходимо получить строки типа

OlympicID OlympicName ProfileID LevelID
----------- --------------- ---------- --------
1 Олимпиада 7 0
1 Олимпиада 6 0
2 Олимпиада2 71 0
3 Олимпиада2 61 0

Пробую так:
SELECT  OlympicID
       ,OlympicName
       ,OlympicNumber
       ,[Year]
       ,ProfileID
       ,LevelID

FROM    (SELECT *
         FROM   OPENXML(@idoc,'/DictionaryData/DictionaryItems/DictionaryItem',2) 
              WITH (OlympicID  INT, OlympicNumber INT,
                  OlympicName VARCHAR(200), Year INT
				  ,ProfileID INT 'Profiles/Profile/ProfileID'
				  ,LevelID INT 'Profiles/Profile/LevelID'
			
                  )
        ) a

Получаю
OlympicID OlympicName ProfileID LevelID
----------- --------------- ---------- --------
1 Олимпиада 7 0
2 Олимпиада2 71 0


Пробую так
SELECT
OlympicID,
       ProfileID
       ,LevelID
       
FROM    (SELECT *
         FROM   OPENXML(@idoc,'/DictionaryData/DictionaryItems/DictionaryItem/Profiles/Profile',2) 
              WITH (
			  OlympicID  INT '../../../DictionaryItem/OlympicID', 
			    ProfileID INT 
				  ,LevelID INT 
  			
                  )
        ) a

Получаю
OlympicID OlympicName ProfileID LevelID
----------- --------------- ---------- --------
1 Олимпиада 7 0
1 Олимпиада 6 0
1 Олимпиада 71 0
1 Олимпиада 61 0
25 май 16, 13:49    [19217915]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML и Mater-Detail  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Oleg6619,
в последнем DictionaryItem лишнее
должно быть что-то типа ../../OlympicID
25 май 16, 13:57    [19217991]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML и Mater-Detail  [new]
Oleg6619
Member

Откуда:
Сообщений: 441
СПАСИБО!
25 май 16, 13:59    [19218011]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить