2013-04-23 2 views
1

내 테이블 구조가 어떻게 표시되는지 필드 정의 (약 100 개 이상)가 포함 된 텍스트 파일에서 테이블을 만드는 방법을 찾아야합니다. 여기텍스트 파일에서 SQL Server 테이블 만들기

 
da_ctat 1 progress status of a sample 
vc_acct 6 Assigned account 
qc_bact 6 billing account #1 
lc_bac2 6 billing account #2 for a split 
... 
... 
zc_bar 12 z code 
pc_wav 1 wai 
oc_p1  1 ftp1 
tc_df1 1 ftp2 
kc_qq  1 ztp 
mc_split 1 split billing 

위의 텍스트가 내가 저장 프로 시저를 만들거나 테이블을 생성합니다 다른 방법을 찾을 필요가

 
column 1-8 character is the field name 
column 9 space 
column 10-11 is the size of field name 
column 12 space 
column 13 - 80 is field comment 

의 의미입니다 : 여기에 크기와 기술에 필드 이름의 샘플입니다 필드는 위와 같습니다. 예를 들어, 필드 이름은 1 자 길이이고 설명은 "샘플의 진행 상황"인 da_ctat입니다. 테이블의 다음 필드는 vc_acct, 길이가 6 자이고 할당 된 계정에 대한 설명 등입니다. a

생성 할 백 개가 넘는 필드가 있으므로 생성 할 저장 프로 시저를 작성하는 방법이 있습니까? 나를 수동으로 테이블에 대한 필드를 만들 필요없이 테이블 구조? 지역 사회 닉

+0

SSIS를 사용할 수 있습니까? – swasheck

+0

파일에서 어떻게 테이블 이름, 열 데이터 형식, 기본 키 등을 알 수 있습니까? –

+0

테이블 이름을 결과라고해야합니다. 모든 필드는 문자이고 da_ctat는 고유 한 키가 될 수 있습니다. – Nick

답변

2

이 자동화 될 필요가 일회성 노력, 또는 뭔가 도움에 대한

덕분?

한 번만, 나는 Excel과 많은 연결을 사용할 것입니다. 100 줄은 실제로 형식을 넘기는 것이 아닙니다.

반복 할 경우 표준 SQL 스크립트로 변환하기 위해 선택한 스크립트 언어로이 파일을 전처리합니다. 내 선택은 SQL 서버와 매우 쉽게 통합되기 때문에 powershell이 ​​될 것입니다.

필드 유형이 없으므로 정의 파일이 불완전한 것처럼 보입니다. 그들 모두 int, floats, varchar입니까?

+0

그렇지만 필자는 필드 이름이 샘플 데이터로 만들어지기를 바랍니다. 그렇지 않으면 명명 방법이 끔찍합니다. 또한 데이터 정규화를 검색 할 수도 있습니다. – marceljg

+0

이것은 한 번 할 일입니다. 필드 유형은 모두 문자입니다. 불행하게도 우리가받는 데이터는이 방법으로 필드 이름을 지정합니다. – Nick

3

아마도이 작업을 수행하는 가장 직접적인 방법은 고정 너비 플랫 파일을 데이터 원본으로 사용하여 SSIS 패키지를 만드는 것입니다. 귀하의 목적지를 최종 테이블과는 다른 것으로 설정합니다 (즉, "rawdata"스키마 또는 "rawdata"라는 별도의 데이터베이스 사용). 이 초기 매핑을 사용하여 제안 된 데이터 형식이있는 테이블을 만들 수 있습니다 (단, 실제로 데이터를 알고 있어야합니다).

SSIS

이 작업을 완료하면, 당신은 SSIS에서 Foreach 루프 컨테이너를 만들 수있는 이러한 플랫 파일 원본 및 원시 대상이 특정 폴더를 반복. 이 작업이 한 번 수행되는 경우 SQL Server Data Tools를 현재 Visual Studio 2010 설치 (있는 경우)에 설치하거나 설치 관리자가 VS 2010 Shell에 SSDT를 설치하지 않아도 설치할 수 있습니다 . 이것이 일회성이 아니라면 주기적으로 실행되도록 예약 할 수있는 패키지로 배포하기 위해 SSIS 설치에 대한 라이센스를 조사해야합니다.

모두 실패하면 SSMS를 열고 대상 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업, 데이터 가져 오기를 클릭하고 플랫 파일 원본, 고정 너비 대상을 선택하고 소스 매핑을 수행하여 테이블 스키마를 생성 할 수 있습니다 > 100)을 작성한 다음 테이블 작성 스크립트를 생성하면 이러한 열을 작성하는 데 어려움이 있습니다.

그러나 실제로이 세 개의 열만있는 경우 ...

CREATE TABLE schema rawdata AUTHORIZATION <pick an owner here>; 
CREATE TABLE rawdata.rawfields (
    fieldname varchar(8), -- i'm actually unclear here because 
          -- the next column's name/purpose is unclear 
    fieldsize int, -- or other numeric datatype 
    fieldcomment varchar(255) 
); 

그러면 C# 또는 PowerShell 스크립트를 작성하여 파일로 디렉터리를 반복 할 수 있습니다. 나는 SQL Server 인스턴스에 대한 연결을 설정했던, 여기에서

C#을

string fieldname, fieldsize, fieldcomments;    
var files = System.IO.Directory.GetFiles("path", "*.ext"); 
foreach (var file in files) 
{ 
    var lines = System.IO.File.ReadAllLines(file); 
    foreach (var line in lines) 
    { 
     fieldname = line.Substring(0, 8); 
     fieldsize = line.Substring(9, 1); 
     fieldcomments = line.Substring(10, 73); 
    } 
} 

매개 변수가 삽입 명령을 생성하고 변수에 데이터를 삽입 :이처럼 보일 것입니다.

대량 삽입

서식 파일 만들기 : (다음

<?xml version="1.0"?> 
<BCPFORMAT 
     xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <RECORD> 
    <FIELD ID="1" xsi:type="CharFixed" LENGTH="8"/> 
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="2"/> 
    <FIELD ID="3" xsi:type="CharFixed" LENGTH="68"/> 
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" 
    </RECORD> 
    <ROW> 
    <COLUMN SOURCE="1" NAME="fieldname" xsi:type="SQLCHAR" /> 
    <COLUMN SOURCE="2" NAME="fieldlength" xsi:type="SQLCHAR" /> 
    <COLUMN SOURCE="3" NAME="fieldcomments" xsi:type="SQLCHAR" /> 
    </ROW> 
</BCPFORMAT> 

(위로) PowerShell 스크립트 또는 디렉토리에있는 파일을 반복하는 C#을 응용 프로그램을 쓸 수 있으며, 전화를 당신이

bcp <<yourdatabase>>.rawdata.rawfiles in \\path\to\data\file.ext 
     -f \\path\to\format\file.Xml -T 

기타)

를 신뢰할 수있는 연결을 얻을 수 있습니다 가정3210
bcp <<yourdatabase>>.rawdata.rawfiles in \\path\to\data\file.ext 
     -f \\path\to\format\file.Xml -U username -P password 
관련 문제