我有一个包含多个元素和属性的xml(你可以在下面看到一个例子),我想从中创建一个SQL表/表。
XML示例:
<prgs>
<prg Id="1" >
<name>Xulescu</name>
<type>Human</type>
<attribs>
<attrib>doesn't matter</attrib>
</attribs>
<timeZone>doesn't matter</timeZone>
<URL>doesn't matter/</URL>
.....
</prgs>
我需要制作一个这样的表
ID | Name
-------------------------
1 | Xulescu
......
谢谢
另一种情况
这个怎么样?
<schedules type="tip1">
<schedule prgsId="15361" >
<event Id="1234" date="2012-10-05">
<times>
<time>01:00</time>
</times>
</event>
<event Id="2345" date="2012-10-05">
<times>
<time>01:30</time>
</times>
</event>
结果应该是一个表
ID ScheduleID PrgsID showId Date Time
.................................................................
1 xxx xxxx 1234 2012-10-05 01:00
2 xxx xxxx 2345 2012-10-05 01:30
ID是一个自动增量字段
ScheduleID, PrgsID
是FK密钥
答案 0 :(得分:1)
这样的事情:
DECLARE @XmlFile XML
SELECT @XmlFile = CAST(BulkColumn AS XML)
FROM OPENROWSET (BULK 'C:\temp\sample.xml' , SINGLE_BLOB) AS XMLDATA
SELECT
ID = Prgs.value('@Id', 'int'),
Name = Prgs.value('(name)[1]', 'varchar(50)')
FROM
@XmlFile.nodes('/prgs/prg') AS XTbl(Prgs)
如果您的文件包含此XML:
<prgs>
<prg Id="1" >
<name>Xulescu</name>
<type>Human</type>
</prg>
<prg Id="2" >
<name>Xulescu2</name>
<type>Human</type>
</prg>
</prgs>
你会得到这个输出:
ID Name
------------
1 Xulescu
2 Xulescu2
更新:针对您的其他方案 - 这个怎么样? (假设您已在@XML
变量中拥有XML结构):
INSERT INTO dbo.YourTable(ScheduleID, PrgsID, ShowId, [Date], [Time])
SELECT
Sched.value('@prgsId', 'int'),
Sched.value('@prgsId', 'int'),
Events.value('@Id', 'int'),
Events.value('@date', 'date'),
Events.value('(times/time)[1]', 'varchar(50)')
FROM
@XML.nodes('/schedules/schedule') AS XTbl(Sched)
CROSS APPLY
Sched.nodes('event') AS XTbl2(Events)
不确定ScheduleId
和PrgsId
中您想要的属性/属性 - 我只在PrgsId
上看到一个<schedule>
属性...