2012-04-02 12 views
0

Excelファイルから同じ正確な列を持つ別のテーブルにインポートされた1つのテーブルのデータを挿入しようとしています。私は、すべてのデータエントリが存在しないかどうかを確認します

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'   

を挿入するために行くときには、PRIMARY KEY制約 'PK_MFGPNs_1' は、このエラーメッセージ

メッセージ2627、レベル14、状態1、行1 違反を思い付きます。オブジェクト 'dbo.WM_MFGPNs'に重複キーを挿入できません。 ステートメントが終了しました。

だから私は

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

をEXISTSしかし、私はまだ同じエラーメッセージは表示されませWHERE含まれるようにクエリを変更しました。何か案は?

+4

PRIMARY KEYは何ですか?あなたの 'NOT EXISTS'は、' manufacturer'カラムをチェックするのではなく、キーが存在しないことをチェックしなければなりません... –

答えて

2

野生の推測では、WM_MFGPNsのPKは製造元ではなく、MFGPNなどの別の列です。 このようにすると仮定すると、あなたの挿入は

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 
    ) 

編集なり:OK、あなたのテーブルには、複合主キー(つまり2つの以上のフィールドの組み合わせがユニークなキーを備える)を持っています。

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

大丈夫です。私はそのコードを試しました。 WM_MFGPNテーブルには2つのPKがあり、1つは製造者であり、もう1つはMPNWPです。これらの列のいずれかが既に存在するかどうかを確認するのではなく、指定された製造元のMFGPNが既に存在するかどうかを確認したい。 – webminer07

+1

テーブルにはどのようにして2つの主キーがありますか?私の頭は、そのコンセプトの周りを包み込むようにスピンしています;)多分あなたはユニークなインデックスを持っているという意味ですか? – Leslie

+0

メーカー(PK、varchar(100)、not null)MPNWP(PK、varchar(32)、not null)MFGPN Cage Url ....その他2つのPKを持つ方法はわかりませんが、それはPKのように見えるようにフォーマットしましたか?私は何をしようとしているのより具体的にするために、私は "BulkImport"と呼ばれるテーブルを取って、それから数千の製造業者を持っている "MFGPNs"と呼ばれる巨大なテーブルにすべてを挿入しようとしています。問題は、すでにいくつかのエントリが存在することです。エントリの最も重要な部分はMPNWPであり、これは(製造者パートなしの句読点)です。これは、すべてのエントリごとに異なる必要があります。 – webminer07

関連する問題