파일에 BULK INSERT
을 사용하여 원본 테이블 순서를 유지하고 ID를 추가 할 수 있음을 발견했습니다.
을 감안할 때 나는 의도적으로 순서가 행 이동 탭으로 구분 된 테이블, 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
답장을 보내 주셔서 감사합니다. 지금까지 읽은 모든 것은 이것이 사실이 아니란 것을 암시합니다. [이 SO 게시물] (http://stackoverflow.com/questions/189694/how-to-keep-row-order-with-sqlbulkcopy)는 SqlBulkCopy와 함께 작동하지 않을 것이라고 제안하고 [다른 게시물] (https : //groups.google.com/forum/? fromgroups #! topic/microsoft.public.sqlserver.programming/Bc9HhokagYA). 삽입 순서를 보장하기 위해 수행 할 수있는 방법은 거의 없습니다. 내가 만난 유일한 유망한 점은 http://blogs.msdn.com/b/sqltips/archive/2005/07/20/441053.aspx의 4 번 지점 이었지만 대량 삽입에 도움이되지 않습니다. 감사. –
대량 삽입 + ID가 나를 위해 여기에서했던 것처럼 당신을 위해 작동하지 않는다면, 유일한 나머지 옵션은 대량 삽입 전에 플랫 파일에 직접 RowID 카운터를 삽입하는 쉘 스크립트 일 수 있습니다. Perl은 이런 종류의 일을 쉽게 만듭니다. –
감사합니다. 나는 네가 제안한 것과 똑같이 일을 끝냈다. RowNumber 열을 추가하기 위해 입력을 편집하면서 입력을 편집합니다. 나는 주변을 둘러 쌀 수있는 방법이 있기를 바라고 있었다. 그렇게 말하면서, 자신의 솔루션을 조금 더 조사하면서 가치가 있다고 생각합니다. 그러나 기대했던대로 작동하는지 확인하십시오. 앞서 언급했듯이 대량 파일을 삽입하는 동안 또는 소스 파일에 순서가 정의되어 있지 않으면 SqlBulkCopy를 통해 순서를 유지하는 확실한 방법이있는 것처럼 보입니다. 또한 관련 order by 절이 없으면 선택에 대한 주문을 보장 할 수 없습니다. 다시 한번 감사드립니다. –