我创建了一个database
(从XML
读取和填充数据)。我用SqlBulkCopy
做了这个。
但场景是每当XML更新时(可能是插入新记录或修改现有记录) ...因此数据库也应该更新,所以我'我们创造了一个解决方案
首先应该在数据库和数据库中删除所有表的所有记录。再次执行SqlBulkCopy
,以便可以更新数据......
但似乎非常糟糕。
有没有办法只更新那些记录,如果源XML
有任何新记录,还需要插入新记录?
我也尝试了一些数据集合并操作,但我无法找到使用它们的正确方法。
答案 0 :(得分:1)
试试这个:
Serialize the xml到一个类对象中 - 你可以将它添加为这个类对象的集合,即List<object>
。然后通过C# Stored Procedure调用传递xml的唯一ID - 现在序列化的记录。您可以循环访问集合并使用存储过程匹配每个id。如果来自xml的记录不是太多,这可能会影响性能。
在存储过程中执行IF SELECT Count(*)... > 0
。如果它返回大于0的值,则记录存在:
IF(SELECT COUNT(*) FROM table where uniqueid = @id) > 0)
BEGIN
UPDATE table ... WHERE uniqueid = @id
END
ELSE
BEGIN
INSERT INTO table (...) VALUES(...)
END
或者使用MERGE INTO
也很好用。
让存储过程返回一个值或boolen以指示数据库已成功更新。