我有一个像这样的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/