我正在做一些网络抓取来建立一个个人 SQL 数据库。当我循环浏览网络请求时,我正在添加记录。唯一的问题是,Web 请求中有时会出现重复项,我想确保只添加一条记录,如果它不存在于我的数据库中。我认为这可以通过在每次插入之前执行 SQL 查询来完成,以确保尚未添加记录,但这是最好的方法吗?首先建立一个 Generic.List,然后在最后插入我的所有数据库是否更有意义?
问问题
88 次
2 回答
1
似乎您需要主键或对将行标识为重复的列的唯一约束。然后,如果插入中存在违反唯一约束的错误,则该行将不会插入。捕获异常,将其记录到不同的表中以供将来验证并移至下一行。 http://www.w3schools.com/sql/sql_unique.asp
于 2012-08-22T17:55:52.333 回答
1
您可以创建一个存储过程,该过程将尝试更新记录,然后在更新查询未更新任何行时插入。这将最大限度地减少需要运行的查询数量并防止检查行的存在。一点点谷歌搜索发现了这个。第二个选项看起来可能是您正在寻找的。
/*
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
于 2012-08-22T18:07:44.713 回答