0

これは、一部の人にとっては簡単な質問かもしれません。しかし、私はSQLに強くないので、私の問題の解決策を期待しています.

私は2つのテーブルを持っていProductVenueImportますSupplierVenueImport.

MERGE句とテーブルSupplierVenueImportProductVenueImport使用してから までのすべてのレコードをダンプしています。には、レコードをインポートするテーブルとの間で有効なレコードが含まれます。TempTempSupplerVenuImportTempProductVenueImport

ProductVenueImportただし、テーブルからデータをインポートする前Tempに、ターゲット ( ) 内の重複レコードを確認する必要がありますProductVenueImport

たとえば、'A' という名前のレコードをインポートする場合、ProductVenueImport'A' が既に存在するかどうかを調べる必要があります。存在しない場合は、「A」を挿入するだけで済みます。

誰かがこれを行う方法を教えてもらえますか?

カーソルのみを使用していますか?

ありがとう、ナレシュ

4

4 に答える 4

1

Tempテーブル自体に重複がないと仮定すると、次のように MERGE を使用できます。

  1. 存在しない製品を挿入します。

  2. 既存の製品の場合は NO-OP を実行します。

  3. OUTPUT 句で使用$actionして、どの行が挿入対象 (および挿入済み) と見なされ、どの行が更新対象 (実際には更新されていない) であるかをマークします。

これが私が意味することです:

DECLARE @noop int;  -- needed for the NO-OP below

MERGE INTO ProductVenueImport AS tgt
USING Temp AS src
ON src.ProductID = tgt.ProdutID
WHEN NOT MATCHED THEN
  INSERT (    column1,     column2, ...)
  VALUES (src.column1, src.column2, ...)
WHEN MATCHED THEN
  UPDATE SET @noop = @noop  -- the NO-OP instead of update
OUTPUT $action, src.column1, src.column2, ...
  INTO anotherTempTable
;
于 2013-06-17T05:39:51.457 に答える
0

質問が正しくない場合は申し訳ありませんが、ソース テーブルで "一致しない場合の挿入" を使用してマージ ステートメントを使用し、新しいレコードだけを挿入することはできますか?

あなたの場合、それはこのようになるはずです

merge into ProductVenueImport using temp on (<condition for duplicate>)
when not matched then insert <clause>;

マージ句により、重複するレコードがソース テーブルに挿入されないようになります。

于 2013-06-17T05:34:25.353 に答える
0

私はこれがこれを行うと思います:

INSERT INTO PRODUCTTBL(FEILD1, FIELD2, FIELD3, FIELD4, FIELD5)
SELECT (FIELD1,FIELD2,FIELD3,FIELD4,FIELD5) FROM TEMP WHERE CRITERIAFIELD NOT IN(SELECT     DISTINCT CRITERIAFIELD FROM PRODUCTTBL)
于 2013-06-17T05:05:51.723 に答える