我可以忽略SQL数据库已经存在从我传递到SqlBulkCopy的数据表中数据的重复记录。如果是,那么如何解释我,如果否和其他选项。SqlBulkCopy的忽略的数据表中重复的记录从数据库
回答
不,这不是内置的。您需要清除客户端上的数据或首先插入临时表中。
正如以前的海报说,这是不是建立在我使用下面的实现类似:
SQL存储过程,接受你所需要的数据TableValuedParameter。
在存储过程中,我然后将所有记录插入临时表。一旦你有了它,你可以在存储过程中使用SQL MERGE语句将数据插入到不存在的地方。
所以,让我们假设我们的数据仅仅是存储在表中的人的人的名字。我们只有一个ID和一个名字。我也假设这张桌子被称为'人'。
以下是我创造我的表值参数类型(在SQL Server中创建)
CREATE TYPE udt_person AS TABLE(
[id] [INT] NOT NULL,
[name] [nvarchar(50)] NULL
)
GO
我现在创建存储过程:
CREATE PROCEDURE SaveNewPeople @pPeople udt_Person
AS
BEGIN
-- Create Temp table
CREATE TABLE #tmpPeople (id INT, name VARCHAR 50)
-- We will stage all data passed in into temp table
INSERT INTO #tmpPeople
SELECT id, name FROM @pPeople
-- NB: you will need to think about locking strategy a bit here
MERGE people AS p
USING #tmpPeople AS t
ON p.id = t.id
WHEN NOT MATCHED BY TARGET THEN
-- We want to insert new person
INSERT (id, name) VALUES (t.id, t.name)
WHEN MATCHED THEN
-- you may not need this, assume updating name for example
UPDATE SET p.name = t.name
END
现在,我们已经制定了SQL。
让我们在C#中创建大量的数据:
DataTable ppl = new DataTable();
ppl.Columns.Add("id", typeof(int));
ppl.Columns.Add("name", typeof(string));
// table is created, let's add some people
var bob = ppl.NewRow();
bob["id"] = 1;
bob["name"] = "Bob";
ppl.Rows.Add(bob);
var jim = ppl.NewRow();
jim["id"] = 2;
jim["name"] = "Jim";
ppl.Rows.Add(jim);
// that's enough people for now, let's call the stored procedure
using(var conn = new SqlConnection("YouConnStringHere"))
{
using(var cmd = new SqlCommand("SaveNewPeople", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
var tvp = new SqlParameter
{
ParameterName = "@pPeople",
SqlDbType = SqlDbType.Structured,
Value = ppl,
TypeName = "udt_person"
}
cmd.Parameters.Add(tvp);
conn.Open();
cmd.ExecuteNonQuery();
}
}
希望这给你的想法。如果您然后修改了C#数据表,您应该看到插入,更新或忽略的行。
祝你好运。
是的,谢谢GinjaNinja。我有你说的。你能否给我一个表值函数和SQL合并语句的代码示例。我正在使用Sql Server 2000和.net 2.0 – Rahul
我修改了我的上面的帖子,然后注意到你在SQL 2000上。这不起作用,对不起! – GinjaNinja
- 1. 在数据库中重复记录
- 2. mysql:只记录某个数据库或忽略其他数据库的?
- 3. 如何忽略数据库查询中重复的顺序值
- 4. 更新表记录,而忽略重复
- 5. 从数据库中检索到的数据忽略换行符
- 6. 网站数据库重复记录
- 7. 数据仓库中的重叠记录
- 8. 如何统计数据库中重复记录的数量?
- 9. 总结数据框忽略重复
- 10. 合并数据表而忽略重复的行
- 11. 从数据库到数组的记录
- 12. 只将csv中的重复记录插入到数据库中
- 13. SqlBulkCopy的从CSV到SQL数据表
- 14. 忽略EmberJS数据中的已更改记录
- 15. 如何在使用MYSQL从数据库中检索数据时忽略foreach循环中的重复行
- 16. Zend_Form:带有复选框的HTML表中的数据库记录
- 17. 在大型数据库表中标记重复记录的最快方法
- 18. Spring验证器在数据库中的重复记录
- 19. 消除实体框架数据库中的重复记录
- 20. 如何维护数据库中的重复记录?
- 21. 只显示数据库中的重复记录
- 22. Django重复数据库中的现有记录
- 23. 使用vb.net检查sql数据库中的重复记录
- 24. 纠正SQL Server数据库中的重复记录
- 25. Linq to SQL忽略第一个数据库记录
- 26. 在数据库表上记录数据
- 27. Python重复数据删除记录 - 重复数据删除
- 28. 如何忽略列中不包含数据的重复行
- 29. 导入数据并忽略SQL Server中的重复项
- 30. Dockerized Neo4j忽略以前的数据库
你记录中的主键是什么?该记录是否没有主键? –
一个可能的解决方案是使该表的列唯一。为此,我们必须在表格中创建一个索引,并使用列名称来检查唯一性。 –