我有一个像这样的 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 文档发生更改,我的应用程序应向表中添加任何 <Person>
的新行。在 SQL 表中找不到。
当然,我可以循环遍历每个 <Person>
的整个 SQL 表。检查行并在未找到时添加该行,但是有更好的方法吗?
为了增加额外的复杂性,如果我更新 <Person>
的名字在 XML 文件中,它需要更新该人之前在 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/