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