1

次のクエリを実行しています。

IF NOT EXISTS 
    (SELECT TOP 1 forumViewID FROM rla.dbo.forumView WHERE fv_sessionID = 27392504 AND fv_topicID = 23971) 
BEGIN 
    INSERT INTO rla.dbo.forumView (fv_sessionID, fv_topicID) VALUES (27392504, 23971); 
END;

fv_sessionID と fv_topicID にまたがる一意のインデックスがあるため、ほとんどの場合、このクエリは期待どおりに機能し、セッションごとに 1 つの「ビュー」のみが生成されますが、エラーが発生することもあります。

Violation of UNIQUE KEY constraint 'IX__forumView'. Cannot insert duplicate key in object 'dbo.forumView'.

これを止めるために何かすることはありますか、またはこれらの場合にキャッチして無視する必要がありますか?

4

2 に答える 2

0

AKA が言ったように、このエラーを回避するには、fv_sessionid を ID 列にする必要があります。

ID 列が必要ない場合は、以下のコードを試して、そのエラーを回避してください。

BEGIN TRANSACTION

    IF NOT EXISTS
    (SELECT TOP 1 forumViewID FROM rla.dbo.forumView WHERE fv_sessionID = 27392504 AND fv_topicID = 23971)

      BEGIN

       INSERT INTO rla.dbo.forumView (fv_sessionID, fv_topicID) VALUES (27392504, 23971)

        IF ( @@ERROR <> 0 )
           ROLLBACK TRANSACTION
        END

       IF (@@TRANCOUNT > 0)

   COMMIT TRANSACTION
于 2013-07-23T09:33:36.050 に答える
0

ベストプラクティスは Identityそのように設定されていcolumnます。一意の値を自動的に処理します

この場合、try と catch を使用します。

于 2013-07-23T08:24:59.800 に答える