簡體   English   中英

SQL Server:如何將XML合並到幾個表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM