SQL Server 2008을 사용하고 5 개의 입력 된 열이있는 테이블이 있습니다.SQL Server 대량 고정 길이 고정 문자 데이터
CREATE TABLE [dbo].[deviceDataBulk](
[f1] [char](9) NULL,
[f2] [char](5) NULL,
[f3] [char](7) NULL,
[f4] [char](7) NULL,
[f5] [char](6) NULL)
또한 bcp 형식 파일이 있습니다.
<RECORD>
<FIELD ID="1" xsi:type="CharFixed" LENGTH="9" COLLATION="Turkish_CI_AS"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="5" COLLATION="Turkish_CI_AS"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="7" COLLATION="Turkish_CI_AS"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="7" COLLATION="Turkish_CI_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="6" COLLATION="Turkish_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="f1" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="2" NAME="f2" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="3" NAME="f3" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="4" NAME="f4" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="5" NAME="f5" NULLABLE="YES" xsi:type="SQLCHAR"/>
</ROW>
내 데이터 파일에는 각 줄에 필드 종결자가없는 고정 길이 char 데이터가 들어 있습니다. 따라서 전체 줄은 34 자입니다.
제 문제는 필드 4이며 필드 5는 각 행에 없을 수 있습니다. 나는 그 파일에 21 줄의 긴 줄 또는 28 줄의 긴 줄을 가질 수 있습니다.
필드 5가 존재하고 필드 4가없는 경우는 없습니다.
텍스트 파일의 가능한 시나리오는 다음과 같습니다.
f1 f2 f3 f4 f5
f1 f2 f3 f4
f1 f2 f3
BULK INSERT
과 함께이 파일을 삽입 할 수 없습니다. 해당 필드가 없을 때 null을 삽입하려면 BULK INSERT
을 원하고, 도구가 줄 끝까지 도달하면 나머지 필드는 null을 삽입하면됩니다.
유일한 해결책 인 경우 사용할 수있는 방법은 SQL Server를 사용하여 이러한 char 값을 파싱하거나 C#을 윈도우 응용 프로그램과 leting 파싱 (파일에서 줄 단위로 읽기, 구문 분석 및 행 삽입) 않습니다. 나는 상황을 요약하려고 노력했다. 사실 목표 테이블에는 35 개의 열이 있고 마지막 6 개의 테이블은 비어있을 수있다. 그리고 데이터 파일에는 60 줄의 데이터가 있습니다. 나는 5 분마다 새로운 데이터 파일을 갖게 될 것이다. –
이 방법을 선택하는 유일한 해결책 인 것 같습니다. –
60 줄의 데이터 만 필요하면 성능에 대해 너무 걱정하지 않아도됩니다. SQL이 문자열 조작 (언어는 무엇입니까?)에 좋지 않을 수도 있지만, IMHO는 괜찮은 작업을 수행합니다. 35 열에 대한 문장을 작성하는 것은 재미 없을 것입니다. = P – deroby