고정 너비의 데이터가있는 텍스트 파일이 있습니다. 텍스트 파일에는 ID, 데이터, 상태가 포함됩니다. ID는 단순한 INT입니다. State에는 2 개의 CHAR statename이 있습니다. 데이터는 해당 주에 등록 된 회사의 정보입니다. SQL 서버 와이드 테이블에 고정 너비 파일
는 SQL 서버 테이블에 넣어하려면 내가 먼저라는 SQLServer에 테이블에 텍스트 파일을 덤프는참고 dbo.rawcompanyinfo_delimited : 나는 데이터 열에 만 4 열을 표시 한 설명의 편의를 위해. 그것에는 500의 란이있다.
CREATE TABLE dbo.rawcompanyinfo_delimited(ID smallint NOT NULL, Data VARCHAR(MAX) NULL, State CHAR(2));
INSERT INTO dbo.rawcompanyinfo_delimited(100,'ABCINC 111 333.5 USD','PA')
INSERT INTO dbo.rawcompanyinfo_delimited(200,'APPLE 213 333.5 USD','PA')
INSERT INTO dbo.rawcompanyinfo_delimited(300,'BTEC 100 123.5 USD','PA')
INSERT INTO dbo.rawcompanyinfo_delimited(400,'S INC 123 333.0 USD','PA')
INSERT INTO dbo.rawcompanyinfo_delimited(500,'B INC 145 123.2 USD','PA')
또한 dbo.rawcompanyinfo_delimited을 통해 그때 map.CompaniesLenInfo을 통해 루프 중첩 된 커서를 썼다
CREATE TABLE map.CompaniesLenInfo(Startingposition int not null, Length int not null, columnnames varchar(100) not null)
insert into map.CompaniesLenInfo(1,10,CompanyName)
insert into map.CompaniesLenInfo(11,3,CompanyID)
insert into map.CompaniesLenInfo(15,5,TotalIncome)
insert into map.CompaniesLenInfo(21,3,Currency)
map.CompaniesLenInfo에 저장 나 Startingposition, 길이, COLUMNNAMES을 알려주는 매핑 테이블이 결과를 테이블에 저장하십시오. 나는 넓은 table.Can 사람으로 삽입 할 수 있습니다
CREATE TABLE dbo.output(ID INT , CompanyName VARCHAR(10),CompanyID VARCHAR(3),TotalIncome VARCHAR(5),Currency VARCHAR(3)) ;
INSERT INTO dbo.output(100,'ABCINC','111','333.5','USD','PA')
INSERT INTO dbo.output(200,'APPLE','213','333.5', 'USD','PA')
INSERT INTO dbo.output(300,'BTEC' ,'100', '123.5', 'USD','PA')
INSERT INTO dbo.output(400,'S INC' ,'123', '333.0', 'USD','PA')
INSERT INTO dbo.output(500,'B INC' ,'145', '123.2', 'USD','PA')
DECLARE @ID INT,@StartPosition INT,@Len INT;
DECLARE @Data NVARCHAR(MAX), @ColumnName VARCHAR(100),@Val VARCHAR(MAX),@CompanyID CHAR(9),@State_Code VARCHAR(2);
DECLARE @Currency VARCHAR(10);
DECLARE @FinCursor AS CURSOR;
DECLARE @ParsingCursor AS CURSOR;
SET @FinCursor=CURSOR FAST_FORWARD FOR SELECT ID,Data
FROM map.CompaniesLenInfo WHERE State='PA';
OPEN @FinCursor;
FETCH NEXT FROM @FinCursor INTO @ID,@Data;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ParsingCursor = CURSOR FAST_FORWARD FOR SELECT StartPosition,Length,columnnames
FROM dbo.rawcompanyinfo_delimited;
OPEN @ParsingCursor;
FETCH NEXT FROM @ParsingCursor INTO @StartPosition, @Len, @ColumnName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Val = SUBSTRING(@Data,@StartPosition, @Len);
/* Not sure how to insert into dbo.output*/
FETCH NEXT FROM @ParsingCursor INTO @StartPosition, @Len, @ColumnName;
END
CLOSE @ParsingCursor;
DEALLOCATE @ParsingCursor;
FETCH NEXT FROM @FinCursor INTO @ID,@Data;
END
CLOSE @FinCursor;
DEALLOCATE @FinCursor;
방법은 아래처럼 빠를 수있는 다른 방법을 제안?