파일에서 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로 달성 할 수 있습니까?
수천 아무것도 가져 오는 동안 데이터를 변환 할 수있다. 원하는 삽입 방법을 사용하십시오. 또한이 질문에 계속해서 질문하고 있습니다. 검색을 통해 모든 가능한 답변을 찾을 수 있습니다. – usr
내가 가진 구체적인 문제는 점으로 구분 된 날짜 형식이었습니다. 나는 수천 개의 행이 필요할 때 필요한 변환으로 인해 성능이 저하되는지 확실하지 않습니다. 귀중한 의견을 보내 주셔서 감사합니다. –
매번 전체 파일을 가져와야하는지 아니면 새로운 행만 가져와야하는지 잘 모르겠다. 모든 데이터를 임시 테이블로 가져와 이전 테이블을이 테이블로 대체하는 방법에 대해 읽었습니다. 이것이 내가 묻고 싶은 일을하는 가장 좋은 방법을 모르기 때문입니다. 이것은 단지 작동해야하며, 반드시 최선의 방법 일 필요는 없습니다. –