【问题标题】:How to select from XML using T-SQL and XQuery如何使用 T-SQL 和 XQuery 从 XML 中进行选择
【发布时间】:2015-08-08 14:00:27
【问题描述】:

我尝试用 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

【问题讨论】:

    标签: sql sql-server xml sql-server-2008


    【解决方案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 |
    

    【讨论】:

    • 非常感谢它工作我试过SELECT TEMPTABLE.UserData.value('int[1]','int') AS int FROM @UserDetails.nodes('/Registration/Skills/int')AS TEMPTABLE(UserData) ,但它变得空了。再次谢谢你
    猜你喜欢
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多