[英]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)
輸出:
| int |
|-----|
| 2 |
| 1 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.