0

個人用の SQL データベースを構築するために Web スクレイピングを行っています。Web リクエストをループしながら、レコードを追加しています。唯一のことは、Web リクエストに重複が表示されることがあり、データベースにまだ存在しない場合にのみレコードを追加するようにしたいということです。これは、すべての挿入の前に SQL クエリを実行して、レコードがまだ追加されていないことを確認することで実行できると思いますが、これが最善の方法ですか? 最初に Generic.List を構築し、最後にすべてのデータベース挿入を行う方が理にかなっていますか?

4

2 に答える 2

1

レコードを更新し、更新クエリが行を更新しなかった場合に挿入を試行するストアド プロシージャを作成できます。これにより、実行する必要があるクエリの数が最小限に抑えられ、行の存在のチェックが回避されます。少しグーグルでこれを見つけまし。2 番目のオプションは、探しているもののようです。

/*
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 に答える