首先构建列表,或查询每条记录? (必须检查重复)

时间:2012-08-22 17:50:43

标签: c# sql sql-server web-scraping

我正在进行网络抓取以构建个人SQL数据库。当我循环遍历网络请求时,我正在添加记录。唯一的问题是,重复有时会出现在Web请求中,我想确保只在我的数据库中不存在记录时才添加记录。我收集这可以通过在每次插入之前执行SQL查询来完成,以确保还没有添加记录,但这是最好的方法吗?首先构建Generic.List,然后在最后完成所有数据库插入更有意义吗?

2 个答案:

答案 0 :(得分:1)

似乎您需要在将列标识为重复的列上使用主键或唯一约束。然后,如果插入中存在违反唯一约束的错误,则该行将不会插入。捕获异常,将其记录到另一个表以供将来验证并移至下一行。 http://www.w3schools.com/sql/sql_unique.asp

答案 1 :(得分:1)

您可以创建一个存储过程,该存储过程将尝试更新记录,然后在更新查询未更新任何行时插入。这将最小化需要运行的查询数量,并防止检查行的存在。谷歌搜索了一点this。第二个选项看起来可能就是你要找的东西。

/*
Same SP is used to INSERT as well as UPDATE a table.
Here we are avoid unnecessary checking of whether the record exists or not.
Instead try to Update directly. If there is no record then @@RowCount would be 0.
Based on that Insert it as a new record.
*/
CREATE PROCEDURE uspUPSert_Ver2
(
    @empID INT,
    @fname VARCHAR(25),
    @lname VARCHAR(25),
    @emailid VARCHAR(50)
)
AS
BEGIN
    SET NOCOUNT ON
    BEGIN TRAN
        UPDATE tblUpsert WITH (SERIALIZABLE)
            SET emailid = @emailid ,
                firstname = @fname ,
                lastname = @lname
        WHERE EmpID = @empID

        IF @@ROWCOUNT = 0
        BEGIN
            INSERT INTO tblUpsert VALUES (@empID, @fname, @lname, @emailid)
        END
    COMMIT TRAN
END
GO