Sql server T SQL大容量插入跳过第一行(带或不带标题)

Sql server T SQL大容量插入跳过第一行(带或不带标题),sql-server,tsql,sql-server-2012,bulkinsert,Sql Server,Tsql,Sql Server 2012,Bulkinsert,我以前使用过BULK INSERT,但我刚刚注意到它在跳过第一行时遇到问题。我不想让它跳过任何东西,所以这是我一直在使用的代码 IF OBJECT_ID('tempdb.dbo.#tempTable', 'U') IS NOT NULL DROP TABLE #tempTable; CREATE TABLE #tempTable ( StartDate datetime, EndDate datetime, TransactionItemsMigrated bigint, Transactio

我以前使用过BULK INSERT,但我刚刚注意到它在跳过第一行时遇到问题。我不想让它跳过任何东西,所以这是我一直在使用的代码

IF OBJECT_ID('tempdb.dbo.#tempTable', 'U') IS NOT NULL
DROP TABLE #tempTable;

CREATE TABLE #tempTable
(
StartDate datetime,
EndDate datetime,
TransactionItemsMigrated bigint,
TransactionSizeBytes bigint,
CurrentItemsFailed bigint
)

BULK INSERT #tempTable
FROM 'C:\csv\xxxxx.csv' --change to CSV file location
WITH 
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
)

INSERT INTO Transactions 
(
    ProjectID, 
    StartTime, 
    EndTime, 
    TransactionItemsMigrated, 
    TransactionSizeBytes,
    TransactionTimestamp,
    CurrentItemsFailed
)
SELECT 
    4, --change to projectID
    StartDate,
    EndDate,
    TransactionItemsMigrated,
    TransactionSizeBytes,
    GETDATE(), --sets TransactionTimestamp to current datetime
    CurrentItemsFailed 
FROM #tempTable

insert工作正常,但它会跳过标题后的第一行数据。如果我去掉标题并使用FIRSTROW=1、FIRSTROW=0,甚至完全注释FIRSTROW,它仍然会跳过第一行。我已经查看了回车符\n或\r\n,但是所有其他行都可以正常工作。我怀疑这是问题的根源,但我不确定如何让第一排车停下来。源数据是一个没有应用格式的纯csv文件。想法?

我认为您需要再次查看数据的格式。也许某个地方有一个看不见的空白

IF OBJECT_ID('tempdb.dbo.#tempTable', 'U') IS NOT NULL
DROP TABLE #tempTable;

CREATE TABLE #tempTable
(
StartDate datetime,
EndDate datetime,
TransactionItemsMigrated bigint,
TransactionSizeBytes bigint,
CurrentItemsFailed bigint
)

BULK INSERT #tempTable
FROM 'D:\User\Documents\test.csv' --change to CSV file location
WITH 
(
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
)

SELECT * FROM #tempTable
此代码适用于此示例csv文件

StartDate,EndDate,TransactionItemsMigrated,TransactionSizeBytes,CurrentItemsFailed
2016-03-17,2016-03-17,0,1,2
2016-03-18,2016-03-17,1,1,2
2016-03-19,2016-03-17,2,1,2
2016-03-20,2016-03-17,3,1,2
用这个输出

StartDate   EndDate TransactionItemsMigrated    TransactionSizeBytes    CurrentItemsFailed
2016-03-17 00:00:00.000 2016-03-17 00:00:00.000 0   1   2
2016-03-18 00:00:00.000 2016-03-17 00:00:00.000 1   1   2
2016-03-19 00:00:00.000 2016-03-17 00:00:00.000 2   1   2
2016-03-20 00:00:00.000 2016-03-17 00:00:00.000 3   1   2

奇怪……当我没有标题行并使用FIRSTROW=1时,它会跳过第一行。只要用header行和FIRSTROW=2再次尝试,它就可以正常工作。我不确定这对我有什么意义…但现在就行了。谢谢你的贡献。