C#和MsSql中有效的一对多插入

时间:2009-04-09 07:15:30

标签: c# asp.net sql

我有两张表,如下所示:

News: (ID, Title, TagID)
Tags: (ID, Tag)

每条新闻只能有一个标签。处理新闻表插入的最有效方法是什么? Tags表有50 000行。

我只做大约的批量插入。每次300条新闻,每小时约2次。我假设我需要一些内存缓存用于标签?

如果标签不在标签表中,我需要插入标签并将TagID设置为新插入的标识。

希望你能得到这个想法!

2 个答案:

答案 0 :(得分:1)

您在后台使用的是哪个版本的SQL Server?

如果您使用的是SQL Server 2008,我建议将每天的标记和新闻批量加载到临时工作表中,然后使用MERGE语句从这些工作表中更新实际的标记和新闻表。我会使用C#“SqlBulkCopy”类。

MERGE允许您只在一个方便的SQL语句中轻松插入已更改的项目,并可能更新已存在的项目。

如果您使用的是SQL Server 2005或更低版本,您可以基本相同,但您必须编写一些代码(C#或T-SQL)来手动检查需要从临时bulkload表中插入的内容,以及已经存在的东西。

马克

答案 1 :(得分:0)

我假设每个新闻项目都会得到一个字符串列表,这些字符串是所谓的“标签”。根据您给出的结构,每个新闻项只能有一个标签?这看似不寻常,但无论如何都适用于此。

如果您的Tags表上有索引,搜索速度非常快,数据库无论如何都会处理缓存,所以不要担心缓存。当你在正确的地方有索引时,你会惊讶于数据库可以加快多少速度

从标签中选择Tag = whatever1(对每个标签执行此操作),每次如果没有返回的行插入它,否则使用您找到的ID来执行此操作。在每个INSERT上运行proc。