2016-10-03 1 views
1

BULK INSERT 쿼리의 LASTROW 인수를 매개 변수화하려고합니다. SQL Server로 가져올 텍스트 파일의 마지막 데이터 행에는 텍스트 파일의 행 수에 대한 정보가 들어 있습니다. 그리고이 번호를 사용하여 BULK INSERT 쿼리의 LASTROW 인수 값을 채울 계획입니다.Parameterize Microsoft SQL Server 2014에 대한 대량 삽입

TEXTFILE의 예 :

20161003|3504|1360| 
20161003|3540|1441| 
EOF|2 

쿼리 내가 일하고 :

메시지 :

DECLARE @FilePath VARCHAR(500) 
SELECT @FilePath = 'C:\path\textfile.txt' 
DECLARE @file VARCHAR(MAX) 

SELECT @file = (SELECT * FROM OPENROWSET(BULK N'C:\path\textfile.txt', SINGLE_CLOB) AS Content) 

DECLARE @LastRow INT 
DECLARE @LastRow_String VARCHAR(10) 

SELECT @LastRow_String = (SELECT SUBSTRING(@file, CHARINDEX('EOF|', @file)+4, LEN(@file))) 
SELECT @LastRow = (SELECT CAST(@LastRow_String AS INT)) 

DECLARE @Query VARCHAR(MAX) 
SELECT @Query = ('BULK INSERT [Database].[dbo].[Table] FROM ''' + @FilePath + 
''' WITH (FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''|\n'', LASTROW = ' + @LastRow + ')') 

은 내가이 오류 메시지가 위의 쿼리를 실행하면 245, 수준 16, 상태 1, 줄 11
변환 할 때 varchar 값을 변환하지 못했습니다. 'BULK IN 'FIELDTERMINATOR ='| ', ROWTERMINATOR ='| \ n ', LASTROW ='에서 데이터 유형 int로 SERT [데이터베이스]. [dbo]. [표]부터 'C : \ path \ textfile.txt'

도움을 주시면 감사하겠습니다.

+0

LastRow는 정수입니다. Query로 연결하려면 LastRow_String을 사용해야 할 수도 있습니다. 공백이 걱정된다면, ltrim (rtrim (@LastRow_String))을 할 수있다. – Jayvee

+0

@Jayvee That 's it! 정말 고맙습니다! –

답변

0

문제는 LastRow가 정수인 점입니다. Query로 연결하려면 LastRow_String을 사용해야 할 수도 있습니다. 공백이 걱정된다면, ltrim (rtrim (@LastRow_String))을 할 수 있습니다.