SQL Server大容量插入错误

SQL Server大容量插入错误,sql,sql-server,bulkinsert,Sql,Sql Server,Bulkinsert,这是我的CSV格式的源数据: 4,23,2AY5623,7235623 4,23,2GP1207,1451207 4,23,2GQ6689,4186689 表: CREATE TABLE [dbo].[Table1]( [idCodeLevel] [int] NOT NULL, [idFirm] [int] NOT NULL, [valCodeFrom] [varchar](15) NOT NULL, [valCodeTo] [varchar](15) NOT

这是我的CSV格式的源数据:

4,23,2AY5623,7235623
4,23,2GP1207,1451207
4,23,2GQ6689,4186689
表:

CREATE TABLE [dbo].[Table1](
    [idCodeLevel] [int] NOT NULL,
    [idFirm] [int] NOT NULL,
    [valCodeFrom] [varchar](15) NOT NULL,
    [valCodeTo] [varchar](15) NOT NULL
) ON [PRIMARY]
这是我用于批量导入的代码:

USE Test
GO

TRUNCATE TABLE Table1
GO

BULK INSERT Table1
  FROM 'C:\Temp\test.csv'
  WITH (
    FIELDTERMINATOR = ',',
    MAXERRORS=0,
    ROWTERMINATOR = '\n'
  )
GO
我得到的错误是:

Msg 4864,第16级,状态1,第2行
第1行第1列(idCodeLevel)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)

你能告诉我为什么失败吗

我在谷歌上搜索,发现我可能不得不使用.fmt格式。但是如何将csv文件转换为fmt呢。我看过从sql表创建fmt文件的代码


非常感谢你的帮助

csv是否在字段名称的顶部有一行?如果是这样,您需要在批量语句中添加“FIRSTROW=2”。如果没有,请尝试创建一个包含所有VARCHAR字段的新表,然后检查数据:您的数据中可能有一些不希望出现的奇怪内容,例如非打印字符。以文本形式导入,然后尝试“从新表中选择ISNUMERIC([FIELD1])。

csv是否在字段名称的顶部有一行?如果是这样,您需要在批量语句中添加“FIRSTROW=2”。如果没有,请尝试创建一个包含所有VARCHAR字段的新表,然后检查数据:您的数据中可能有一些不希望出现的奇怪内容,例如非打印字符。以文本形式导入,然后尝试“从新表中选择ISNUMERIC([FIELD1])”。

使用sql导入向导从外部文件导入数据

右键单击database-->task-->import-->将平面文件指定为源,然后选择目标服务器


有关详细信息,请访问

使用sql导入向导从外部文件导入数据

右键单击database-->task-->import-->将平面文件指定为源,然后选择目标服务器


有关详细信息,请访问

如果去掉“rowdterminator=”\n“行,会发生什么情况?嗯。。。。您使用的是什么版本的SQL Server?在SQL Server 2008 R2上,我无法复制此项-就像一个符咒一样工作-如果去掉“rowtterminator=”\n“行会发生什么?嗯。。。。您使用的是什么版本的SQL Server?我无法重现这一点-就像一个符咒一样-在SQL Server 2008 R2I上,除了第一行中的数据(如上所述)之外,我没有任何东西。但添加“FIRSTROW=2”起了作用。真的很奇怪。但除了第一排,它装载了所有东西。所以,我做了一个假的第一行并运行了批量插入,它加载了所有东西。非常感谢>至少花了一个小时。@user1666952我怀疑您的文本文件开头有一个UNICODE字节顺序标记,或者其他一些对记事本不可见的无效字符。这样的字符对于整型字段来说当然是无效的,所以你会得到一个转换错误。我只想确保实际数据的第一行实际上在导入的数据中!除了第一行中的数据(如上所述),我没有其他东西。但添加“FIRSTROW=2”起了作用。真的很奇怪。但除了第一排,它装载了所有东西。所以,我做了一个假的第一行并运行了批量插入,它加载了所有东西。非常感谢>至少花了一个小时。@user1666952我怀疑您的文本文件开头有一个UNICODE字节顺序标记,或者其他一些对记事本不可见的无效字符。这样的字符对于整型字段来说当然是无效的,所以你会得到一个转换错误。我只想确保实际数据的第一行实际上在导入的数据中!