[英]SQL Server : how to merge XML into several tables
我的架構有3個級別,如下所示:
觸發器
TRIGGER_ID (PK), TARGET_GROUP_SERIAL, EVENT_ID, START_DATE, END_DATE, MEASURE_FIELD, IS_ACTIVE, PRIORITY
TriggerActions
TRIGGER_ID, TRIGGER_DETAIL_ID (PK + Identity Insert), ACTION_ID, ISOLATION_VOLUME
ActionChannels
TRIGGER_DETAIL_ID (PK), EXECUTION_METHOD_ID
現在,我的輸入是一個XML文件,我需要將其合並到DB模式中,該XML如下所示,
請注意,如果XML在RealTimeTrigger中不包含TriggerID,則表示新的觸發器,而當ActionDetailId = 0時,則表示新的動作。
有什么建議么?
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfRealTimeTrigger xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RealTimeTrigger>
<TargetGroupSerial>3</TargetGroupSerial>
<ClientTriggerId>1</ClientTriggerId>
<StartDate>2014-08-06T00:00:00</StartDate>
<EndDate>2014-09-03T00:00:00</EndDate>
<MeasureField>FIELD4</MeasureField>
<IsActive>true</IsActive>
<Priority>999</Priority>
<ControlGroupPercentage>20</ControlGroupPercentage>
<Actions>
<RealTimeAction>
<ActionDetailId>0</ActionDetailId>
<Id>12</Id>
<Channels>
<Channel>
<ChannelId>100</ChannelId>
<ChannelId>201</ChannelId>
</Channel>
</Channels>
<ActionPrecentage>40</ActionPrecentage>
</RealTimeAction>
<RealTimeAction>
<ActionDetailId>0</ActionDetailId>
<Id>13</Id>
<Channels>
<Channel>
<ChannelId>100</ChannelId>
<ChannelId>201</ChannelId>
</Channel>
</Channels>
<ActionPrecentage>40</ActionPrecentage>
</RealTimeAction>
</Actions>
</RealTimeTrigger>
</ArrayOfRealTimeTrigger>'
如果沒有id值,那么XML將子元素鏈接在一起(如果僅通過嵌套在XML中鏈接),那么我將使用帶有ROWNUMBER的select來為XML中的行分配臨時ID。 然后,我認為您可以使用到表變量將MERGE合並到觸發器表中。 在該表變量中,您可以為基於原始/ ROWNUMBER的ID設置一列,並為新記錄插入的ID設置一列。 然后,您有足夠的數據將事物連接在一起,並在接下來的兩個級別中重復進行。
讓我知道您是否需要更多詳細信息,或者這足以讓其他人擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.