2016-06-27 2 views
0

동안 중복 된 기본 키가있는 행을 건너 뛰거나 건너 뜁니다. 대량 삽입 메서드를 사용하여 CSV 파일에서 행을 삽입하고 있습니다. 그러나 중복되는 기본 키에서는 실패합니다. 내가 중복 기본 키 '행에 필드를 업데이트 할 필요가일괄 삽입 - SQL

Use People 
Go 
BULK 
INSERT tblProfile 
FROM 'F:\People.txt' 
WITH 
(
DATAFILETYPE='widechar', 
CODEPAGE = 'ACP', 
FIELDTERMINATOR = ';', 
ROWTERMINATOR = '\n', 
ERRORFILE = 'F:\ErrorRows.csv' 
) 
GO 

:

여기 내 예제 코드입니다. 여기 예를 들어

내 테이블의 샘플입니다 : CSV 파일의 코드를 "68"로이 행의 행이있는 경우

Code Name Family City 
--------------------------- 
45  Joe Stone USA 
67  Sara Stone USA 
68   Stone 

우리가 이름이나 빈 또는 null의 도시 (내 테이블) 다음 대량 삽입 업데이 트와 그렇지 않으면 기본 키 에서이 중복을 건너 뛰고 다른 사람들을 위해 삽입을 작성하십시오.

이렇게 할 수 있나요? DoctorMick으로

+0

당신은이 작업을 수행하는 데 사용하는 코드를 게시 할 수 업데이트하는? –

답변

1

당신은 유효한 레코드를 삽입하고 중복 무시 할 수있는 매우 높은에 MAXERRORS 속성을 설정할 수 있습니다 here

을 밝혔다. 불행히도 이것은 데이터 집합의 다른 오류로 인해로드가 실패하지 않는다는 것을 의미합니다.

또는 여러 트랜잭션에서 데이터를로드하는 BATCHSIZE 속성을 설정할 수 있습니다. 따라서 중복이있는 경우 배치 만 롤백합니다.

또는

사용 온도 테이블은 복제를 필터링하고

INSERT INTO #tblProfile(Id, Col1) -- temporary table 
VALUES 
(3, S3), 
(4, S4), 
(5, S5) 

INSERT INTO tblProfile 
SELECT * FROM #tblProfile 
WHERE NOT EXISTS (SELECT Id FROM #tblProfile WHERE #tblProfile.Id = tblProfile.id) 

;WITH cte 
    AS (SELECT ROW_NUMBER() OVER (PARTITION BY id 
             ORDER BY (SELECT 0)) RN 
     FROM #tblProfile) 
DELETE FROM cte 
WHERE RN > 1 

Update T 
SET T.Col1 = ISNULL(T1.Col1,T.Col1) 
FROM tblProfile T join #tblProfile T1 ON T.id =T1.id 
+0

나는 그것을 보았다.하지만 필요하다면 중복 된 행을 업데이트하는 방법을 말하지 않았다! – Nofuzy

+0

업데이트를 원할 경우 기본 키없이 모든 데이터를 임시 테이블에 삽입하고 임시 테이블에서 주 테이블로 업데이트를 사용해야합니다. –

+0

어떻게? 보여 주시겠습니까? 나는 C#과 SQL 대량 복사를 사용할 수도있다. – Nofuzy