我有一個SQL查詢將記錄插入到我傳遞給它的XML字符串的表中。該字符串可以包含1個節點或多個節點,因此每個節點都是新記錄。TSQL從XML字符串插入記錄
這裏是我的XML字符串:
<root>
<data>
<segment>
<trainingEventID>9</trainingEventID>
<localeID>641</localeID>
<numOfTeammates>12</numOfTeammates>
<nonProdHrs>21</nonProdHrs>
<segmentDate>10/10/2014</segmentDate>
<trainers>
<trainer>
<empID>HUS123</empID>
</trainer>
<trainer>
<empID>Dan123</empID>
</trainer>
</trainers>
</segment>
</data>
<data>
<segment>
<trainingEventID>9</trainingEventID>
<localeID>641</localeID>
<numOfTeammates>12</numOfTeammates>
<nonProdHrs>21</nonProdHrs>
<segmentDate>10/25/2014</segmentDate>
<trainers>
<trainer>
<empID>HUS123</empID>
</trainer>
<trainer>
<empID>Dan123</empID>
</trainer>
</trainers>
</segment>
</data>
</root>
每segment
是添加到表的新紀錄。
現在,我有一個名爲trainers
的單獨表格。對於每位教練,我還需要在該表中插入一條記錄,但它需要有該段的last inserted record id
。
這裏是我的查詢:
INSERT INTO myTable(trainingEventID, localeID, segmentDate, numofTeammates, nonProdHrs)
SELECT ParamValues.x1.value('trainingEventID[1]', 'INT'),
ParamValues.x1.value('localeID[1]', 'INT'),
ParamValues.x1.value('segmentDate[1]', 'DATE'),
ParamValues.x1.value('numOfTeammates[1]', 'INT'),
ParamValues.x1.value('nonProdHrs[1]', 'FLOAT')
FROM @xml.nodes('/root/data/segment') AS ParamValues(x1);
我怎麼能去插入教員到另一個表與從段創建插入記錄ID?
每個細分市場的關鍵是什麼? 'trainingEventID' +'segmentDate'? – 2014-10-30 00:34:52
這似乎幾乎與我在這裏提供的答案相同(http://stackoverflow.com/questions/26124743/bulk-insert-nested-xml-with-foreign-key-as-identity-column-of-first-table/ 26128718#26128718)除了「最後插入的段的記錄ID」似乎很奇怪。你的意思是說,如果'empID'值出現在多個段中,你只需要最近的段(基於'segmentDate')?或者你想爲每個單獨的'segmentDate'指定那個'empID'? – 2014-10-30 03:21:07
所以在上面的例子中,我們將有2個段節點(2條記錄)插入到表中。但是用記錄的自動增量ID。現在,我需要將培訓師添加到另一個表中,但他們需要引用剛纔插入的片段。總共會有4條記錄插入教練表中,其中2條片段ID爲1,另外2條片段ID爲2。 – SBB 2014-10-30 12:33:57