2014-02-10 5 views
3

어떤 이유로이 때문에 "테이블에 중복 레코드를 삽입 할 수 없습니다"오류가 발생합니다.레코드가 이미 존재하지 않으면 테이블에 삽입

DECLARE @CreditDebitAdjustmentDetail TABLE 
     (
     CustomerID INT, 
     AdjustmentReason VARCHAR(50) 
     ) 

INSERT INTO @CreditDebitAdjustmentDetail 
     (CustomerID, AdjustmentReason) 
VALUES (143, -- CustomerID - int 
     '024' -- AdjustmentReason - varchar(50) 
     ) 

INSERT INTO [DMS].[dbo].[Deductions] 
     (
     CustomerID, 
     DeductionCode, 
     DeductionDescription 
     ) 
     SELECT b.CustomerID, 
       b.AdjustmentReason, 
       b.AdjustmentReason 
     FROM @CreditDebitAdjustmentDetail b 
     WHERE NOT EXISTS (SELECT 1 
          FROM [DMS].[dbo].[Deductions] 
          WHERE CustomerID = b.CustomerID 
            AND DeductionCode = b.AdjustmentReason) 

그리고 레코드가 이미 존재하기 때문에이 테이블에 삽입하지 않습니다 :

INSERT INTO [DMS].[dbo].[Deductions] 
     (
     CustomerID, 
     DeductionCode, 
     DeductionDescription 
     ) 
     SELECT b.CustomerID, 
       b.AdjustmentReason, 
       b.AdjustmentReason 
     FROM @CreditDebitAdjustmentDetail b 
     WHERE NOT EXISTS (SELECT 1 
          FROM [DMS].[dbo].[Deductions] 
          WHERE CustomerID = b.CustomerID 
            AND DeductionCode = b.AdjustmentReason) 

이상한 것은 내가 등을 테스트합니다.

여기에 뭔가가 있습니까?

편집 - 내가이 일을하여 고정했다하지만 난 여전히 같은 오류를 받고 있어요 생각은 :

INSERT INTO [DMS].[dbo].[Deductions] 
     (
     CustomerID, 
     DeductionCode, 
     DeductionDescription 
     ) 
     SELECT a.CustomerID, 
       a.AdjustmentReason, 
       a.AdjustmentReason 
     FROM @CreditDebitAdjustmentDetail a 
     WHERE NOT EXISTS (SELECT 1 
          FROM [DMS].[dbo].[Deductions] b 
          WHERE a.CustomerID = b.CustomerID 
            AND a.AdjustmentReason = b.DeductionCode) 
+0

이 DeductionCode'가'은'Deductions' 테이블이나 사용되는 테이블 중 하나에 NULL'입니다'아마도'CustomerId' 당신의 인덱스 – user2615302

+1

를 살펴 또는 업데이트. 하나의'NULL'은 허용되지만, 다중'NULL'은 허용되지 않습니다. –

+0

PK에있는 열은 무엇입니까? – twrowsell

답변

2

나는 DOH 그것을 알아 냈어! DISTINCT

KEYWORD ... -_-

INSERT INTO [DMS].[dbo].[Deductions] 
        (
        CustomerID, 
        DeductionCode, 
        DeductionDescription 
        ) 
        SELECT DISTINCT 
          a.CustomerID, 
          ISNULL(a.AdjustmentReason, 'UNKNOWN'), 
          ISNULL(a.AdjustmentReason, 'UNKNOWN') 
        FROM @CreditDebitAdjustmentDetail a 
        WHERE NOT EXISTS (SELECT 1 
             FROM [DMS].[dbo].[Deductions] b 
             WHERE a.CustomerID = b.CustomerID 
               AND CASE a.AdjustmentReason 
                 WHEN NULL THEN 'UNKNOWN' 
                 WHEN '' THEN 'UNKNOWN' 
                END = b.DeductionCode) 
관련 문제