我有一个像这样的MSSQL表:

id     | name
-----------------------------
1        Gerald
2        Ron
3        Becky


还有一个XML文档:

<People>
    <Person>
        <Name>Gerald</Name>
    </Person>
    <Person>
        <Name>Ron</Name>
    </Person>
    <Person>
        <Name>Becky</Name>
    </Person>
</People>


主键是ID,XML文档不在乎ID,而Name是唯一的。

XML文档已更改,我的应用程序应为SQL表中未找到的任何<Person>添加新行。

当然,我可以为每个<Person>遍历整个SQL表,检查是否有一行,如果找不到该行,则添加该行,但是还有更好的方法吗?

为了增加额外的复杂性,如果我在XML文件中更新了<Person>的名称,则它需要更新该人在SQL表中之前所在的同一行。

最佳答案

尝试这个

declare @data xml = '<People>
    <Person>
        <Name>Gerald</Name>
    </Person>
    <Person>
        <Name>Ron</Name>
    </Person>
    <Person>
        <Name>Becky</Name>
    </Person>
</People>'

--Convert xml to rows example:
SELECT N.value('.', 'varchar(50)') as value
FROM @data.nodes('/People/Person/Name') as T(N)

-- use merge to find rows and insert when not found
Merge Table1 as tgt
using (
        SELECT N.value('.', 'varchar(50)') as Name
        FROM @data.nodes('/People/Person/Name') as T(N)
      ) src
on (tgt.name = src.name)
when not matched then
insert (name)
values (src.name);


要更新行,您需要文件中的某种ID来标识要更新的行

关于c# - XML文件到SQL附加插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16740237/

10-11 00:31