2015-01-11 2 views
0

Я применяю XML cross apply для извлечения данных из файла проекта XML с несколькими узлами с помощью хранимой процедуры.
хранимая процедура, как следоватьПрименение XML cross применяется для получения данных из файла XML

INSERT INTO UCDetails 
SELECT 
Usecase.value('@UserID','VARCHAR(100)') AS UCId, --ATTRIBUTE 
Usecase.value('@Name','VARCHAR(100)') AS UCName, --ATTRIBUTE 
Usecase.value('@PmAuthor','VARCHAR(100)') AS UCActor, --ATTRIBUTE 
UCPrecon.value('@Value','VARCHAR(MAX)') AS UCPre, --ATTRIBUTE 
UCPostcon.value('@Value','VARCHAR(MAX)') AS UCPost, --ATTRIBUTE 


FROM 
@xml.nodes('/Project/Models/UseCase')AS TAB(Usecase) OUTER 
apply @xml.nodes('/Project/Models/UseCase/TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue[5] ')AS TAB1(UCPrecon)OUTER 
apply @xml.nodes('/Project/Models/UseCase/TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue[6]')AS TAB2(UCPostcon) 

END 

Вместо того, чтобы только один ряд данных я получаю крест умножения строки, как показано ниже

 
UCId   UCName   UCActor   UCPre     UCPost   
UC01   Login   Bilal Haider User must be Registerd User is Loggined sucessfully  

UC01   Login   Bilal Haider User must be Registerd User is added 

UC01   Login   Bilal Haider User is Loggined sucessfully User is Loggined sucessfully  

UC01   Login   Bilal Haider User is Loggined sucessfully User is added 

UC02   Add User   Bilal Haider User must be Registerd User is Loggined sucessfully 

UC02   Add User   Bilal Haider User must be Registerd User is added 

UC02   Add User   Bilal Haider User is Loggined sucessfully User is Loggined sucessfully  

UC02   Add User   Bilal Haider User is Loggined sucessfully User is added 

Извините за размещение результат, как этот Correct строки выделены жирным шрифтом, но почему я получаю все остальные строки?

XML ссылка Файл: XML FILE

+0

Вы можете разместить 'XML File' и' ожидаемый output' –

+0

Уважаемый Как я могу прикрепить файл XML? любезное руководство и ожидаемый результат выделены в вышеприведенной таблице жирным шрифтом –

+0

Дорогой я опубликовал файл XML https://www.mediafire.com/?g2ad95t3bbhvzdh, вы можете скачать его по этой ссылке –

ответ

1

Не используйте кросс применять против TaggedValues. Вместо этого укажите xPath в предложении values.

select T.X.value('@UserID', 'varchar(100)'), 
     T.X.value('@Name', 'varchar(100)'), 
     T.X.value('@PmAuthor', 'varchar(100)'), 
     T.X.value('(TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue)[5]/@Value', 'varchar(max)'), 
     T.X.value('(TaggedValues/TaggedValueContainer/ModelChildren/TaggedValue)[6]/@Value', 'varchar(max)') 
from @xml.nodes('/Project/Models/UseCase') as T(X) 

Результат

------ ---------- ------------- ------------------------------ ------------------------------ 
UC01 Login  Bilal Haider User must be Registerd   User is Loggined sucessfully 
UC02 Add User Bilal Haider User is Loggined sucessfully User is added 
+0

Спасибо Mikael Eriksson. Это сделано. –

+0

Как я могу сделать заявление sql, которое соответствует вышеуказанной таблице Состояние сообщения с предварительным условием других случаев использования? –

+0

@BILALHAIDER Вы должны задать новый вопрос на сайте, где вы описываете, что хотите, что вы пробовали и как это не работает для вас. –

Смежные вопросы