Sql server 使用T-SQL解析具有默认命名空间的XML
在使用SSMS时,我需要以下格式来获取XML格式Sql server 使用T-SQL解析具有默认命名空间的XML,sql-server,xml,xpath,xquery,Sql Server,Xml,Xpath,Xquery,在使用SSMS时,我需要以下格式来获取XML格式 <ESBTimecardLoad xmlns="http://test.com/schemas"> <Initialize xmlns="http://test.com/schemas"> <Add> <TimeCard> <Attributes>
<ESBTimecardLoad xmlns="http://test.com/schemas">
<Initialize xmlns="http://test.com/schemas">
<Add>
<TimeCard>
<Attributes>
<Timekeeper AliasField="Number">C1235</Timekeeper>
<WorkDate>5/11/2018</WorkDate>
<WorkHrs>1.50</WorkHrs>
<Matter AliasField="Number">04420.3004</Matter>
<WorkType>Admin</WorkType>
<Phase AliasField="Code">rty</Phase>
<Task AliasField="Code">QEW</Task>
<Activity AliasField="Code">TTT</Activity>
</Attributes>
</TimeCardPending>
</Add>
<Add>
<TimeCardPending>
<Attributes>
<Timekeeper AliasField="Number">C888888</Timekeeper>
<WorkDate>7/6/2017</WorkDate>
<WorkHrs>0.25</WorkHrs>
<Matter AliasField="Number">01594.1009</Matter>
<WorkType>Enterprise</WorkType>
<Phase AliasField="Code">P3</Phase>
<Task AliasField="Code">QWE</Task>
<Activity AliasField="Code">YYY</Activity>
</Attributes>
</TimeCardPending>
</Add>
</Start>
</TimecardLoad>
这是我的结果:
<ESBTimeCardLoad xmlns="http://test.com/schemas">
<Initialize xmlns="http://test.com/schemas">
<Attributes>
<Timekeeper>TEster, Monica</Timekeeper>
<WorkDate>05/25/15</WorkDate>
<WorkHrs>10.00</WorkHrs>
<Phase>P3</Phase>
<task>P3_Fsol</task>
<Activity>SETUPS3</Activity>
</Attributes>
<Attributes>
<Timekeeper>Mob, JOhn</Timekeeper>
<WorkDate>05/27/15</WorkDate>
<WorkHrs>8.00</WorkHrs>
<Phase>P3</Phase>
<task>P3_Fsol</task>
<Activity>SETUPS3</Activity>
</Attributes>
</Initialize>
</ESBTimeCardLoad>
测试员,莫妮卡
05/25/15
10
P3
P3_Fsol
设置3
暴徒,约翰
05/27/15
8
P3
P3_Fsol
设置3
我应该以哪种方式更改查询?您显示给我们的XML格式在许多方面都不是很好:
- 您以
打开,但以 - 在第一个
中,以
打开,但以
结束 - 您不应使用与区域性相关的日期格式<代码>2018年5月11日可能被视为11月5日或5月11日
DECLARE @tbl TABLE(ID INT IDENTITY, TimeKeeper VARCHAR(100),WorkDate DATE, WorkHrs DECIMAL(6,2), Matter VARCHAR(100));
INSERT INTO @tbl VALUES
('C1235','2018-11-05',1.5,04420.3004)
,('C8888','2017-06-07',0.25,01594.1009);
WITH XMLNAMESPACES (DEFAULT 'http://Test.com/schemas')
SELECT
(
SELECT 'Number' AS [TimeCardPending/Attributes/Timekeeper/@AliasField]
,TimeKeeper AS [TimeCardPending/Attributes/Timekeeper]
,WorkHrs AS [TimeCardPending/Attributes/WorkHrs]
,'Number' AS [TimeCardPending/Attributes/Matter/@AliasField]
,Matter AS [TimeCardPending/Attributes/Matter]
--and so on
FROM @tbl t
FOR XML PATH('Add'),ROOT('Initialize'),TYPE
) AS [*]
FOR XML PATH(''),ROOT('ESBTimecardLoad');
结果
<ESBTimecardLoad xmlns="http://Test.com/schemas">
<Initialize xmlns="http://Test.com/schemas">
<Add>
<TimeCardPending>
<Attributes>
<Timekeeper AliasField="Number">C1235</Timekeeper>
<WorkHrs>1.50</WorkHrs>
<Matter AliasField="Number">4420.3004</Matter>
</Attributes>
</TimeCardPending>
</Add>
<Add>
<TimeCardPending>
<Attributes>
<Timekeeper AliasField="Number">C8888</Timekeeper>
<WorkHrs>0.25</WorkHrs>
<Matter AliasField="Number">1594.1009</Matter>
</Attributes>
</TimeCardPending>
</Add>
</Initialize>
</ESBTimecardLoad>
C1235
1.50
4420.3004
C8888
0.25
1594.1009
<ESBTimecardLoad xmlns="http://Test.com/schemas">
<Initialize xmlns="http://Test.com/schemas">
<Add>
<TimeCardPending>
<Attributes>
<Timekeeper AliasField="Number">C1235</Timekeeper>
<WorkHrs>1.50</WorkHrs>
<Matter AliasField="Number">4420.3004</Matter>
</Attributes>
</TimeCardPending>
</Add>
<Add>
<TimeCardPending>
<Attributes>
<Timekeeper AliasField="Number">C8888</Timekeeper>
<WorkHrs>0.25</WorkHrs>
<Matter AliasField="Number">1594.1009</Matter>
</Attributes>
</TimeCardPending>
</Add>
</Initialize>
</ESBTimecardLoad>