2012-04-02 5 views
0

Excel 파일에서 가져온 한 테이블의 데이터를 정확한 열이있는 다른 테이블에 삽입하려고합니다. 나는 모든 데이터항목이 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'   

를 삽입 갈 때이 오류 메시지가 메시지 2627

, 수준 14, 상태 1, PRIMARY KEY 제약 조건 'PK_MFGPNs_1'의 1 호선 위반와 함께 제공됩니다. 개체 'dbo.WM_MFGPNs'에 중복 키를 삽입 할 수 없습니다. 명세서가 종료되었습니다.

그래서 나는 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'  
    ) 

존재하지만 여전히 같은 오류 메시지가 나타납니다 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가 있으며, 하나는 Manufacturer이고 다른 하나는 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

관련 문제