0

午後の皆さん、

ユーザーがクリックするとデータをテーブルに挿入するボタンがWebページにあります。このボタンにはメッセージ ボックスが割り当てられており、レコードが保存されたことをユーザーに知らせ、ユーザーをホームページにリダイレクトします。これは現在の状態で完全に正常に動作します。

私の問題は、ユーザーがこのボタンがあるページに戻ってデータを再度挿入するのを止める解決策を見つけたいということです。データベース テーブルに重複するレコードが存在することを回避する必要があります。

インターネットで読んだことから、ストアドプロシージャ内で「IF EXISTS」関数を使用する必要があると推測しています。ストアド プロシージャにある現在のコードでこれがどのように機能するかは 100% わかりません。これらのレコードが利用可能であることを確認したいだけで、そうでない場合は追加するか、既に存在する場合は追加しないでください。

インターネットで読んだ記事の量などに少し混乱していると思います。

これが私の現在のストアドプロシージャです:

ALTER PROCEDURE [dbo].[GasNominationsRawData_Insert]

AS SET NOCOUNT ON;  

INSERT INTO dbo.GasRawData (timestamp,TagName,Value) 

    SELECT timestamp AS Interval, Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) As TagName,
    CONVERT(decimal(10, 2), ROUND(value, 2)) As Value
    FROM 
       OPENQUERY(IHISTORIAN,'
        SET starttime =''yesterday +4h'', endtime =''today +6h'' 
        SELECT timestamp, tagname, value
        FROM ihRawData
        WHERE tagname = "UMIS.99FC9051.F_CV"
           OR tagname = "UMIS.99F851C.F_CV"
           OR tagname = "UMIS.35GTGAS.F_CV"
           OR tagname = "UMIS.99XXG546.F_CV"
        AND timestamp BETWEEN ''timestamp'' and ''timestamp'' 
        AND SamplingMode =Calculated
        AND CalculationMode =Average
        AND IntervalMilliseconds =1h
        ORDER BY tagname, timestamp
        ')

どんな助けや提案も大歓迎です。

よろしくベティ。

4

3 に答える 3

1

重複を防ぐ非常に簡単な方法の 1 つは、UNIQUE INDEX区別したいフィールドに を追加することです。

CREATE UNIQUE INDEX ix_MyIndexName ON Table(Field1, Field2, Field3)

リストされたフィールドに重複する値を挿入しようとすると、エラーがスローされます。

または、上記にオプションIGNORE_DUP_KEY = ONを追加して、重複する値を挿入しようとした場合に続行することもできます。警告が生成されますが、クエリが失敗することはありません。

これにより、オーバーヘッドが最小限に抑えられ、メンテナンス作業を行う必要がなくなります。

于 2011-10-28T13:21:59.790 に答える
0

「重複」とは、の重複を意味しますTagNameか? その場合、最も簡単な解決策は、テーブル内のそのフィールドに対して一意の制約を使用することです。または、AFTER INSERTトリガーを使用して、それが既に存在するかどうかを確認することもできます (おそらく?TagNameの組み合わせを使用)。存在する場合は、トランザクション。VALUEROLLBACK

于 2011-10-28T13:21:44.573 に答える
0

私はIf EXISTSをします

基本的にやるだけ

IF EXISTS( select * from wherever where something = something )
BEGIN
-- Return an error here
Return 0
END
ELSE
BEGIN
 -- Insert Code Goes Here
Return 1
END

次に、SP が 0 を返した場合に SP を実行すると、エラーが発生したことがわかり、重複データの挿入に関するメッセージをユーザーに表示できます。このアプローチは、クエリの結果を検出できることを意味し、重複のために挿入されなかった場合は、適切なメッセージを表示でき、レコードが挿入されたことを確認することもできます。

于 2011-10-28T14:17:03.773 に答える