gpt4 book ai didi

sql-server - 使用 XML 将关系数据导入 SQL Server

转载 作者:行者123 更新时间:2023-12-02 12:41:07 24 4
gpt4 key购买 nike

我已经使用 XML 将大量数据导入到 SQL 中一段时间​​了,但我想知道是否可以从具有子节点的单个 XML 文件跨多个表导入数据?

给出这个例子:

DECLARE @tbl_makes TABLE (ID int IDENTITY(1,1), makeName nvarchar(100))
INSERT INTO @tbl_makes (makeName) VALUES ('Ford')
INSERT INTO @tbl_makes (makeName) VALUES ('Jaguar')

DECLARE @tbl_models TABLE (ID int IDENTITY(1,1), makeID int, modelName nvarchar(100))
INSERT INTO @tbl_models (makeID, modelName) VALUES (1, 'Escort')
INSERT INTO @tbl_models (makeID, modelName) VALUES (1, 'Sierra')
INSERT INTO @tbl_models (makeID, modelName) VALUES (2, 'XK')
INSERT INTO @tbl_models (makeID, modelName) VALUES (2, 'XJS')

SELECT * FROM @tbl_makes m INNER JOIN @tbl_models md ON m.ID = md.makeID

DECLARE @xml XML = '
<cars>
<make name="Ford">
<model name="Mustang" />
<model name="Taurus" />
<model name="F350" />
</make>
<make name="Aston Martin">
<model name="Vanquish" />
<model name="DB7" />
<model name="Lagonda" />
</make>
</cars>'

我知道在插入相关数据之前需要先插入/查找品牌名称。我在网上搜索了这个问题的答案,但示例仅使用一个表。我猜想如果不使用各种临时表是不可能的,但是这里是......

最佳答案

这样的解决方案怎么样?

INSERT INTO @tbl_makes (makeName)
SELECT i.i.value('@name', 'nvarchar(100)')
FROM @xml.nodes('/cars[1]/make')i(i)
LEFT JOIN @tbl_makes MA on i.i.value('@name', 'nvarchar(100)') = MA.makeName
WHERE MA.ID IS NULL;

INSERT INTO @tbl_models (makeID, modelName)
SELECT MA.ID, j.j.value('@name', 'nvarchar(100)')
FROM @xml.nodes('/cars[1]/make')i(i)
INNER JOIN @tbl_makes MA ON i.i.value('@name', 'nvarchar(100)') = MA.makeName
CROSS APPLY i.i.nodes('model')j(j)
LEFT JOIN @tbl_models MO on j.j.value('@name', 'nvarchar(100)') = MO.modelName
WHERE MO.ID IS NULL;

关于sql-server - 使用 XML 将关系数据导入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com