【发布时间】:2014-10-29 23:14:22
【问题描述】:
我有一个 SQL 查询,它将记录从我传递给它的 XML 字符串插入到表中。该字符串可以包含 1 个或多个节点,因此每个节点都是一条新记录。
这是我的 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? -
这似乎与我在此处提供的答案 (stackoverflow.com/questions/26124743/…) 几乎相同,除了“最后插入的段的记录 id”似乎很奇怪。您的意思是如果
empID值出现在多个Segment 中,您只需要最近的Segment(基于segmentDate)?或者你想要每个人segmentDate为那个empID? -
因此在上面的示例中,我们将有 2 个段节点(2 条记录)插入到表中。但是使用记录的自动增量 ID。现在,我需要将培训师添加到另一个表中,但他们需要引用刚刚插入的段。总共有 4 条记录插入到 trainer 表中,其中 2 条的段 id 为 1,另外 2 条的段 id 为 2。
-
从这里,我可以说 select * from trainers where segmentId=1 它会告诉我两个教练
标签: sql-server xml tsql stored-procedures