2016-10-03 65 views
1

我想參數化BULK INSERT查詢的LASTROW參數。 我輸入到SQL Server的文本文件中的最後一行數據包含有關文本文件中行數的信息。我打算使用該數字來填充BULK INSERT查詢的LASTROW參數的值。參數化Microsoft SQL Server 2014批量插入

文本文件的一個例子:

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 SERT [Database]。[dbo]。[Table] FROM'C:\ path \ textfile.txt'WITH(FIELDTERMINATOR ='|',ROWTERMINATOR ='| \ n',LASTROW ='爲數據類型int。

任何幫助表示讚賞!

+0

問題是LastRow是一個整數;您可能需要使用LastRow_String來連接到Query;如果你關心的是空白,你可以做ltrim(rtrim(@LastRow_String)) – Jayvee

+0

@Jayvee就是這樣!非常感謝! –

回答

0

問題是LastRow是一個整數;您可能需要使用LastRow_String來連接到Query;如果你擔心空白,你可以做ltrim(rtrim(@LastRow_String))