문제

하나의 열 텍스트 파일을 SQL 테이블 중 하나로 가져오고 싶습니다. 파일은 욕설 단어 목록 일뿐입니다.

나는 이것을하기 위해 다음 tsql을 썼습니다

BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

그러나 예상치 못한 파일 끝으로 오류가 발생합니다. 가져 오는 테이블 IM은 단지 아이덴티티 필드에 이어 텍스트를 삽입하려는 Nvarchar 필드입니다. 텍스트 파일 "1"을 Eveyr 라인의 시작 부분에 추가하면 제대로 작동합니다. 2 개의 필드를 찾는 경우 SQL이기 때문입니다. 이 주위에 어떤 방법이 있습니까?

감사

도움이 되었습니까?

해결책

이를 위해 FormatFile을 사용해야합니다. 보다 벌크 삽입.

formatfile [= 'format_file_path'

형식 파일의 전체 경로를 지정합니다. 형식 파일은 동일한 테이블이나보기에 BCP 유틸리티를 사용하여 작성된 저장된 응답을 포함하는 데이터 파일을 설명합니다. 형식 파일은 다음과 같은 경우에 사용해야합니다.

* The data file contains greater or fewer columns than the table or view.

* The columns are in a different order.

* The column delimiters vary.

* There are other changes in the data format. Format files are usually created by using the bcp utility and modified with a text editor as needed. For more information, see bcp Utility.

자세한 내용은 자세한 내용은 참조하십시오 형식 파일 사용.

다른 팁

이것은 Keepidentity 인수에 따라 벌크 삽입을 위해 줄에 서면에 설명되어 있습니다. 여기에 말이 있습니다

Keepidentity는 ID 열의 값이 가져온 파일에 존재하도록 지정합니다. Keepidentity가 제공되지 않으면 가져온 데이터 파일 의이 열의 ID 값은 무시되고 SQL Server는 테이블 생성 중에 지정된 시드 및 증분 값을 기반으로 고유 값을 자동으로 할당합니다. 데이터 파일에 테이블 또는보기에 ID 열에 대한 값이 포함되지 않은 경우 형식 파일을 사용하여 데이터를 가져올 때 테이블 또는보기의 ID 열을 건너 뛰어야합니다. SQL Server는 열에 고유 한 값을 자동으로 할당합니다

따라서 형식 파일을 사용하거나 더미 값을 공급하고 Keepidentity 인수를 사용하지 마십시오.

또한 Nvarchar 열만 기반으로 테이블에서보기를 만들고 뷰에 대량 삽입을 할 수 있습니다. 이것은 벌크 인서트를 사용하는 매우 깨끗한 방법입니다.

이렇게하면 ID 열에 대해 걱정하거나 형식 파일을 만들 필요가 없습니다.

대량 삽입 문장은 다음과 같습니다.

BULK INSERT vw_SwearWords FROM 'c:\swearwords.txt' WITH (ROWTERMINATOR = '\n')

텍스트 파일의 구조와 테이블 일치를 확인해야합니다. 테이블에 두 개의 필드가 있으면 텍스트 파일에 두 개의 필드/열을 제공해야합니다.

SQL 테이블의 첫 번째 열은 ID 필드이므로 원하는 값을 제공 할 수 있지만 값이 있어야합니다.

마크

마지막 줄에 cr/lf ( r n)가 있는지 확인하십시오. 때로는 문제가되고, 다른 경우에는 여분의 마차 반환이 파일의 끝에 있습니다. 육각형으로 확인할 수 있습니다.

정체 열을 제거하고 완료되면 다시 넣을 수 있습니다. 또는 데이터베이스 관계를 중단하는 경우 DTS 또는 SSI를 사용하여 가져 오기가 한 번만 가져 오면 가져올 수 있습니다.

SQL Server 2008에서는 SO와 같은 많은 인서트가 포함 된 파일을 만들고 형식 파일을 얻는 것과 싸우지 않고 관리 스튜디오의 쿼리 창에 붙여 넣기가 더 쉽다는 것을 알았습니다.

USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-of-row-constructor/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top