簡體   English   中英

如何使用T-SQL和XQuery從XML中選擇

[英]How to select from XML using T-SQL and XQuery

我試圖用sql進行xml解析。

我嘗試從“ Skill標簽中進行選擇,但只有一行顯示,請任何一位幫助在此先感謝

我的XML格式如下

declare @UserDetails XML
set @UserDetails='
<Registration>
  <objUserBasicData>
    <User_Id>0</User_Id>
    <UserType>0</UserType>
    <UserName>test@test6.com</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>test@test6.com</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

這是因為您只能通過說int[1]選擇第一個int元素。 嘗試這種方式:

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

Sqlfiddle Demo

輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM