SQL Server에서의 주문

order sqlbulkcopy sql-server-2008

문제

텍스트 파일에서 많은 행의 데이터를 가져 오는 상황이 있습니다. 가져 오기 프로세스는 SqlBulkCopy를 사용하여 수행되고 초기에 스테이징 테이블로로드됩니다.

이 데이터에 대해 몇 가지 유효성 검사를 수행하고 유효성 검사가 실패하면 오류가있는 파일 줄을 사용자에게 다시보고 할 수 있기를 원합니다. 내 스테이징 테이블에서 SELECT의 기본 순서와 함께 ROW_NUMBER ()를 사용하기를 희망했지만, 그렇게 할 수 없다고 제안한 몇 가지 질문 이 있습니다.

입력 파일의 원래 순서를 유지할 수있는 방법으로 무엇을 제안 하시겠습니까? 입력 파일 형식은 TSV입니다. 파일 줄을 가리키는 모의 값을 만들어야합니까?

원래 삽입 순서대로 쿼리 결과를보고 할 수있는 방법이 있습니까? 내가 SqlBulkCopy를 사용하여 날짜를로드하는 것에 의존 할 수 있습니까?

인기 답변

필자는 파일에 BULK INSERT 를 사용하여 원본 테이블 순서를 유지하고 ID를 추가 할 수 있음을 발견했습니다.

탭으로 구분 된 테이블 인 C:\MyTable.txt 를 사용하여 의도적으로 행을 순서대로 이동하지 C:\MyTable.txt .

FileName    FileType
wmsetup log
bar txt
wmsetup10   log
WMSysPr9    prx
WMSysPrx    prx
Wudf01000Inst   log
xpsp1hfm    log
_default    pif
0   log
002391_ tmp
005766_ tmp

다음을 실행하고 SQL Server에서 텍스트 파일 순서를 보존했습니다.

IF EXISTS(
    SELECT 1
    FROM sys.tables t
    INNER JOIN sys.schemas s on s.schema_id=t.schema_id
    WHERE t.name='myTable'
    AND t.[type]='U'
    AND s.name='dbo'
)
DROP TABLE myTable
GO

CREATE TABLE dbo.myTable(FileName VARCHAR(80), FileType VARCHAR(30))
GO

BULK INSERT myTable FROM 'C:\MyTable.txt' WITH (
firstrow=2
, fieldterminator='\t'
, rowterminator='\n'
)
GO

ALTER TABLE myTable ADD ID INT IDENTITY(1,1)
GO

SELECT * FROM myTable
GO

결과:

FileName        FileType ID
--------------- -------- -----------
wmsetup         log      1
bar             txt      2
wmsetup10       log      3
WMSysPr9        prx      4
WMSysPrx        prx      5
Wudf01000Inst   log      6
xpsp1hfm        log      7
_default        pif      8
0               log      9
002391_         tmp      10
005766_         tmp      11


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.