2015-08-08 5 views
2

Я попытался выполнить синтаксический анализ xml с помощью sql.Как выбрать из XML с помощью T-SQL и XQuery

И я пытался выбрать из Skill тега, но только одна строка показывает, пожалуйста, любой помощи заранее спасибо

Мой формат XML, как показано ниже

declare @UserDetails XML 
set @UserDetails=' 
<Registration> 
    <objUserBasicData> 
    <User_Id>0</User_Id> 
    <UserType>0</UserType> 
    <UserName>[email protected]</UserName> 
    <Password>user123</Password> 
    <LastLoginTime>2015-08-08T18:22:53.9953905+05:30</LastLoginTime> 
    <IsActive>true</IsActive> 
    <CreatedBy>0</CreatedBy> 
    <CreatedOn>2015-08-08T18:22:53.9953905+05:30</CreatedOn> 
    <ModifiedBy>0</ModifiedBy> 
    <ModifiedOn>2015-08-08T18:22:53.9953905+05:30</ModifiedOn> 
    </objUserBasicData> 
    <objUserDetails> 
    <UserDetails_Id>0</UserDetails_Id> 
    <User_Id>0</User_Id> 
    <FirstName>test</FirstName> 
    <MiddleName /> 
    <LastName>test</LastName> 
    <ContactName /> 
    <Email>[email protected]</Email> 
    <AlternativeEmail /> 
    <RegisterDate>2015-08-08T18:22:54.0164133+05:30</RegisterDate> 
    <Address1 /> 
    <Address2 /> 
    <Country>0</Country> 
    <State>0</State> 
    <City>1</City> 
    <PostCode /> 
    <HomePhone /> 
    <Mobile>1231231232</Mobile> 
    <Fax /> 
    <Marketing>false</Marketing> 
    <HasCV>false</HasCV> 
    <CVName>564195d7-4dfa-42e0-abc1-ef611be588a2.doc</CVName> 
    <HasJobsByEmail>false</HasJobsByEmail> 
    <Website /> 
    <CreatedBy>0</CreatedBy> 
    <CreatedOn>2015-08-08T18:22:54.0164133+05:30</CreatedOn> 
    <ModifiedBy>0</ModifiedBy> 
    <ModifiedOn>2015-08-08T18:22:54.0164133+05:30</ModifiedOn> 
    <DateOfBirth>2015-08-10T00:00:00</DateOfBirth> 
    <CurrentJobTitle>test</CurrentJobTitle> 
    <Career_Id>2</Career_Id> 
    <PrefferedLocation>1</PrefferedLocation> 
    <ExperienceInYears>5</ExperienceInYears> 
    <Gender>1</Gender> 
    </objUserDetails> 
    <Skills> 
    <int>2</int> 
    <int>1</int> 
    </Skills> 
</Registration>' 

Я использовал запрос для выбора данные

SELECT 
    TEMPTABLE.UserData.value('int[1]','int') AS int 
FROM 
    @UserDetails.nodes('/Registration/Skills')AS TEMPTABLE(UserData) 

он получает результат в виде

int 
----------- 
2 

1 отсутствует

Я использовал

DECLARE @XMLDocPointer INT  
    EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @UserDetails  


    SELECT * 
    FROM OPENXML(@XMLDocPointer,'/Registration/Skills',3)  
    WITH ([int] INT)  

    EXEC sp_xml_removedocument @XMLDocPointer 

Опять же результат тот же

int 
----------- 
2 

что я должен сделать получить результат как

int 
----------- 
2 
1 

ответ

3

T потому что вы выбираете только первый элемент int, говоря int[1]. Попробуйте этот способ вместо:

SELECT TEMPTABLE.UserData.value('.','int') AS int 
FROM 
    @UserDetails.nodes('/Registration/Skills/int')AS TEMPTABLE(UserData) 

Sqlfiddle Demo

выход:

| int | 
|-----| 
| 2 | 
| 1 | 
+0

Большое спасибо Он работал, я пытался 'ВЫБРАТЬ TEMPTABLE.UserData.value ('INT [ 1] ',' int ') AS int FROM @ UserDetails.nodes ('/Registration/Skills/int ') AS TEMPTABLE (UserData) ', но он получил нулевое значение. –

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