2013-10-23 2 views
0

파일에서 SQL Server 데이터베이스 테이블로 매일 데이터를 가져 오는 작업이 처리되었습니다. 대량 삽입에 대한 여러 가지 방법을 연구했고, 일정한 작업을 매일 실행하여 명령 줄에서 bcp 유틸리티를 사용하는 것이 좋습니다.변형해야 할 데이터를 대량 삽입 할 때 사용할 방법 (성능)

가장 큰 문제점은 bcp를 사용하여 데이터를 가져올 때 날짜를 변환하는 방법이나 방법을 모르겠다는 것입니다. 예를 들어, dd.mm.yyyy 형식의 날짜 필드가 있는데이 형식은 SQL datetime 형식으로 저장할 수 없습니다.

파일이 매일 업데이트됩니다 (현재 2 백만 행 또는 255MB의 데이터가 있음).이 파일의 작동 방식은 매일 새 파일이 만들어지며 매일 이전 데이터와 새로운 데이터가 모두 포함되어 있습니다. 파일. 파일의 첫 번째 행에는 데이터의 헤더가 포함됩니다. 다음에 오는 데이터는 세미콜론으로 구분되며 각 행은 \n으로 끝납니다. 실제 파일은 16 개 개의 컬럼을 가지며, 그래서 예를 들어 그것을 단순화 :

data.txt로 :

NUMBER;START_DATE;END_DATE;GROUP_ID;IS_OPEN;TOTAL; 
2262101;02.10.2010;01.11.2010;123456789;0;268,75; 
2291245;01.11.2010;01.12.2010;123456789;0;67,25; 
etc... 


I는 다음과 같다 생성 형식 파일 (이하 열 예도). 현재 (DD.MM.YYYY) 형식으로 인해 가능하지 않으므로 날짜를 SQLDATETIME으로 가져 오지 않습니다.

format.fmt : (I)이 테이블/DB, 데이터 파일의 형식 파일 -T = 신뢰할 연결 및 -F = 최초 2 행을 지정하는 명령이

10.0 
4 
1  SQLINT  0 0 "" 1 Id  "" 
2  SQLCHAR 0 4 ";" 2 Number "" 
3  SQLCHAR 0 50 ";" 3 StartDate Finnish_Swedish_CI_AS 
4  SQLCHAR 0 50 ";" 4 EndDate Finnish_Swedish_CI_AS 
5  SQLCHAR 0 20 ";" 5 GroupId Finnish_Swedish_CI_AS 
6  SQLBIT  0 1 ";" 6 IsOpen "" 
7  SQLDECIMAL 0 18 "\n" 7 Total  "" 


헤더 행을 건너 뜁니다. cmd를

:

bcp [database].[dbo].[table] in C:\...\data.txt -f C:\...\format.fmt -T -F 2 


데이터베이스 테이블 : 내 생각은, 문자열로 날짜를 저장하지만, CAST(StartDate as datetime)를 사용하여 읽는했다

CREATE TABLE [dbo].[table](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Number] [int] NOT NULL, 
    [StartDate] [varchar](50) NULL, 
    [EndDate] [varchar](50) NULL, 
    [GroupId] [varchar](50) NULL, 
    [IsOpen] [bit] NULL, 
    [Total] [decimal](18, 2) NULL 

하지만, 그게와 작동하지 않는 것 같습니다.형식. 나 또한 set dateformat dmy을 실행 해 보았습니다.

그래서 매일 데이터베이스 테이블에 수천 개의 행을 자동으로 가져와야하므로이 절차 중에 날짜를 datetime으로 변환해야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까 (성능 현명한)? 효과적인 방법으로 bcp로 달성 할 수 있습니까?

+0

수천 아무것도 가져 오는 동안 데이터를 변환 할 수있다. 원하는 삽입 방법을 사용하십시오. 또한이 질문에 계속해서 질문하고 있습니다. 검색을 통해 모든 가능한 답변을 찾을 수 있습니다. – usr

+0

내가 가진 구체적인 문제는 점으로 구분 된 날짜 형식이었습니다. 나는 수천 개의 행이 필요할 때 필요한 변환으로 인해 성능이 저하되는지 확실하지 않습니다. 귀중한 의견을 보내 주셔서 감사합니다. –

+0

매번 전체 파일을 가져와야하는지 아니면 새로운 행만 가져와야하는지 잘 모르겠다. 모든 데이터를 임시 테이블로 가져와 이전 테이블을이 테이블로 대체하는 방법에 대해 읽었습니다. 이것이 내가 묻고 싶은 일을하는 가장 좋은 방법을 모르기 때문입니다. 이것은 단지 작동해야하며, 반드시 최선의 방법 일 필요는 없습니다. –

답변

0

SQL Server Integration Services를 사용할 수 있습니까?

SSIS 쉽게 행

SSIS

+0

나는 그것이 준비 될 수 있다고 확신한다. 나는 그것에 대해 현재 읽고 있지만, 나는이 문제를 게시 할 것이라고 생각했다. bcp로 할 수있는 방법이 있는지 알아 보았다. 지금까지 오랫동안 작동하도록 노력 해왔다. :) –

+0

그래서 데이터베이스를 확인했다. 서버이며 Integration Services 폴더에는 데이터 프로필 뷰어, 배포 마법사, 패키지 실행 유틸리티 및 프로젝트 변환 마법사가 있습니다. 튜토리얼을 제안하면서 SQL Server Business Intelligence Development Studio를 찾을 수 없었습니다. [link] (http://technet.microsoft.com/en-us/library/ms170057 (v = sql.105)) –

관련 문제