2012-04-02 3 views
0

Ich versuche, Daten aus einer Tabelle, die aus einer Excel-Datei in eine andere Tabelle mit den gleichen genauen Spalten importiert wurde, einzufügen. Wenn ich alle Daten einfügenÜberprüfen Sie, ob Eintrag NOT EXISTS in SQL

INSERT INTO [NQL_RawData].[dbo].[WM_MFGPNs] 
    ([Manufacturer],[MPNWP],[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy]) 

    SELECT [Manufacturer],dbo.BuildPNWP([MFGPN],0),[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy] 

    FROM [NQL_RawData].[dbo].[wm_BulkImport] WHERE Manufacturer = 'MFG NAME'   

kommt es mit dieser Fehlermeldung auf

Msg 2627, Ebene 14, Status 1, Zeile 1 Verletzung der PRIMARY KEY-Einschränkung 'PK_MFGPNs_1'. Kann doppelten Schlüssel in Objekt "Dbo.WM_MFGPNs" nicht einfügen. Die Anweisung wurde beendet.

Also änderte ich die Abfrage enthalten WHERE NOT

INSERT INTO [NQL_RawData].[dbo].[WM_MFGPNs] 
    ([Manufacturer],[MPNWP],[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy]) 

    SELECT [Manufacturer],dbo.BuildPNWP([MFGPN],0),[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy] 

    FROM [NQL_RawData].[dbo].[wm_BulkImport] 

    WHERE NOT EXISTS( 
    SELECT [MFGPN] 
    FROM [NQL_RawData].[dbo].[WM_MFGPNs] 
    WHERE Manufacturer = 'MFG NAME'  
    ) 

VORHANDEN Aber ich immer noch die gleiche Fehlermeldung. Irgendwelche Ideen?

+4

Was ist Ihr PRIMÄRSCHLÜSSEL? Ihr 'NOT EXISTS' sollte überprüfen, dass der Schlüssel nicht vorhanden ist, anstatt die' Hersteller'-Spalte zu überprüfen ... –

Antwort

2

Bei einer wilden Vermutung ist die PK von WM_MFGPNs nicht Hersteller, sondern eine andere Spalte wie MFGPN. dies der Fall zu sein Angenommen, Ihr Einsatz wird

INSERT INTO [NQL_RawData].[dbo].[WM_MFGPNs] 
    ([Manufacturer],[MPNWP],[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy]) 

    SELECT [Manufacturer],dbo.BuildPNWP([MFGPN],0),[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy] 

    FROM [NQL_RawData].[dbo].[wm_BulkImport] blkimp 

    WHERE 
     Manufacturer = 'MFG NAME' -- Your original import filter 
    AND NOT EXISTS -- Prevent duplicate insertions 
    ( 
    SELECT [MFGPN] 
    FROM [NQL_RawData].[dbo].[WM_MFGPNs] mfgpn 
    WHERE blkimp.MFGPN = mfgpn.MFGPN 
    ) 

bearbeiten: OK, Ihre Tabelle ein Composite-Primärschlüssel hat (das heißt die Kombination von zwei oder mehreren Feldern einen eindeutigen Schlüssel umfasst).

INSERT INTO [NQL_RawData].[dbo].[WM_MFGPNs] 
    ([Manufacturer],[MPNWP],[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy]) 

    SELECT [Manufacturer],dbo.BuildPNWP([MFGPN],0),[MFGPN],[Cage],[Url],[DataSheetUrl],[Description],[Status],[NRND],[RoHS],[PbFree],[LOT],[LeadTime],[AddedOn],[AddedBy] 

    FROM [NQL_RawData].[dbo].[wm_BulkImport] blkimp 

    WHERE 
     Manufacturer = 'MFG NAME' -- Your original import filter 
    AND NOT EXISTS -- Prevent duplicate insertions 
    ( 
    SELECT [MFGPN] 
    FROM [NQL_RawData].[dbo].[WM_MFGPNs] mfgpn 
    WHERE blkimp.MFGPN = mfgpn.MFGPN 
      AND blkimp.Manufacturer = mfgpn.Manufacturer 
    ) 
+0

Okay, ich habe diesen Code ausprobiert und bekomme immer noch dieselbe Fehlermeldung. Die WM_MFGPN-Tabelle hat 2 PKs, einer ist Hersteller und der andere ist MPNWP. Ich überprüfe keine dieser Spalten, um zu sehen, ob sie bereits existieren, ich möchte sehen, ob das MFGPN für den angegebenen Hersteller bereits existiert. – webminer07

+1

Wie kann eine Tabelle 2 Primärschlüssel haben? lässt meinen Kopf drehen, versuche es um dieses Konzept zu wickeln;) Vielleicht meinst du, es hat einen eindeutigen Index? – Leslie

+0

Hersteller (PK, varchar (100), nicht null) MPNWP (PK, varchar (32), nicht null) MFGPN Cage Url .... etc ich weiß nicht, wie es 2 PKs hat vielleicht ist ein eindeutiger Index, aber sie ist es so formatiert, dass es aussieht wie ein PK? Aber um genauer zu sein, was ich versuche zu tun, versuche ich eine Tabelle namens "BulkImport" zu nehmen und alles daraus in eine riesige Tabelle namens "MFGPNs" einzufügen, die Tausende von Herstellern hat. Das Problem besteht darin, dass einige der Einträge bereits vorhanden sind. Der wichtigste Teil des Eintrags ist der MPNWP, der (Hersteller-Teil ohne Interpunktion) ist. Dies muss für jeden Eintrag anders sein. – webminer07

Verwandte Themen