C# XML文件到SQL附加插入
我有这样一个MSSQL表:C# XML文件到SQL附加插入,c#,sql-server,tsql,C#,Sql Server,Tsql,我有这样一个MSSQL表: id | name ----------------------------- 1 Gerald 2 Ron 3 Becky 和XML文档: <People> <Person> <Name>Gerald</Name> </Person> <Person> <Name>Ron<
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,名称是唯一的
XML文档会发生更改,我的应用程序应该为SQL表中未找到的任何行向表中添加新行
当然,每次检查一行并添加未找到的行时,我都可以遍历整个SQL表,但是有更好的方法吗
为了增加复杂性,如果我在XML文件中更新a的名称,它需要更新此人在SQL表中之前所在的同一行。您可以向添加一个属性,这表明该属性已在数据库中:
<People>
<Person inserted="1">
<Name>Gerald</Name>
</Person>
<Person inserted="1">
<Name>Ron</Name>
</Person>
<Person inserted="0">
<Name>Becky</Name>
</Person>
</People>
试试这个
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还是sql?读取XML文件的客户端应用程序是c,我使用MSSQL存储数据。因此,如果它是新的XML文档,请使用XML元素加载sql数据库,然后编写一个包含插入ID的新XML文档。在更新后的XML文档中,如果其中一个人发生了更改,则add changed=Yes并使用插入的ID仅导入这些人,然后编写一个没有更改属性的新XML文档。这样行吗?