2013-06-17 2 views
0

Cette requête peut être simple pour certains d'entre vous. Mais je ne suis pas forte dans Sql, alors j'attends une solution à mon problème. Je possède 2 tables, ProductVenueImport et SupplierVenueImport.Filtrage des enregistrements en double lors de l'importation des données de la table source vers la table cible

Nous déversons tous les enregistrements SupplierVenueImport-ProductVenueImport utilisant MERGE clause et une table Temp. Temp aura des enregistrements valides de SupplerVenuImport et du Temp nous importons des enregistrements à ProductVenueImport.

Mais avant d'importer des données à ProductVenueImport à partir de Temp tableau j'ai besoin de vérifier les enregistrements en double dans ma cible (ProductVenueImport).

Par exemple, si j'importe un enregistrement avec le nom «A», je dois regarder dans ProductVenueImport si «A» existe déjà ou non. Si ce n'est pas le cas, alors j'ai seulement besoin d'insérer 'A' sinon.

Quelqu'un pourrait-il me dire comment faire?

Utilise Curseurs seule l'option?

Merci, Naresh

+0

u peut fournir ur requête en cours afin que les suggestions peuvent être donnés en conséquence. Avez-vous simplement besoin de supprimer les enregistrements en double de votre table source avant de l'insérer dans la table cible? Si oui, je crois que cela pourrait être fait sans curseur. Il suffit d'essayer de chercher sur le net pour le même et mieux essayer par vous-même. –

+0

@NitinAgrawal, j'ai besoin de supprimer les doublons de la table 'Temp' et en même temps j'ai besoin de sauvegarder ces enregistrements dans une autre table 'Temp' pour une utilisation ultérieure. – Naresh

Répondre

1

En supposant que la table Temp elle-même n'a pas de doublons, vous pouvez utiliser Merge comme ceci:

  1. Insérez les produits non existants.

  2. Faire un NO-OP dans le cas d'un produit existant.

  3. Utilisez la clause $action dans la clause OUTPUT pour marquer les lignes qui ont été considérées pour l'insertion (et insérées) et celles qui doivent être mises à jour (mais pas réellement mises à jour).

C'est ce que je veux dire:

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 
;
0

Je pense que ce serait faire:

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) 
0

Cela devrait vous permettre de vérifier les doublons dans une table

select nom_colonne du groupe tablename par columnname avoir compte (nom de la colonne)> 1

0

désolé si je ne reçois pas la question n droit, ne pouvez pas utiliser la déclaration de fusion sur la table source avec « En cas de non apparié Insérer » pour insérer les nouveaux enregistrements seul

donc dans votre cas, il devrait être comme ça

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

la fusion La clause s'assurera qu'aucun enregistrement en double n'est inséré dans votre table source.

Questions connexes