最近下载最新的SQL Server 2017 试用,并下载安装AdventureWorks示例数据库,不过出现了一些小问题。
如下:
*** Loading Data
Loading [Person].[Address]
消息 4864,级别 16,状态 1,第 1803 行
第 1499 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 1687 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 5167 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 6612 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 7020 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 7028 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 7295 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 7696 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 9639 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 11003 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4864,级别 16,状态 1,第 1803 行
第 14590 行、第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)。
消息 4865,级别 16,状态 1,第 1803 行
由于超过了最大错误数(10),无法进行大容量加载。
消息 7399,级别 16,状态 1,第 1803 行
链接服务器 "(null)" 的 OLE DB 访问接口 "BULK" 报错。提供程序未给出有关错误的任何信息。
消息 7330,级别 16,状态 2,第 1803 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口"BULK"提取行。
用notepad++打开Address.csv,下拉至1499行看其内容:
11785 1234, rue Ste-Honor?
Saint-Denis 179
93400 E6100000010CE9EC9DA1C96E48405277197595AA0240
{0334F558-C1E9-4E19-8AB0-17E90039B1D5}
2013-12-21 10:09:29.423000000
注意到错误提示第 6 列(PostalCode)出现大容量加载数据转换错误(类型不匹配或者字符对于指定的代码页无效)
再认真看表[Person].[Address]
[AddressID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL,
[AddressLine1] [nvarchar](60) NOT NULL,
[AddressLine2] [nvarchar](60) NULL,
[City] [nvarchar](30) NOT NULL,
[StateProvinceID] [int] NOT NULL,
[PostalCode] [nvarchar](15) NOT NULL,
[SpatialLocation] [geography] NULL,
[rowguid] uniqueidentifier ROWGUIDCOL NOT NULL CONSTRAINT [DF_Address_rowguid] DEFAULT (NEWID()),
[ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_Address_ModifiedDate] DEFAULT (GETDATE())
PostalCode是15个字符,按上面的内容,出现类型不匹配可能是系统读错了数据,对比看后面以E开头的字符可能性大。再细看整行要插入的内容,发现--
“1234, rue Ste-Honor? Saint-Denis”之间只有1个分隔符,变成93400属于第5列,而以E开头的算是第6列,超过了15个字符啦。
再查找整个文件,里面共有16个类似的情况,全部将其变为2个分隔符后保存,再重新加载,正常执行了。
分析:“1234, rue Ste-Honor? Saint-Denis”之间只有1个分隔符,相当于第3列(AddressLine2)本来是无数据的变成插入了[City]列的数据。
这可能是文件编码的问题,因为有问题的行第2列结尾都有“?”字符,在ANSI格式下只看到1个分隔符;而在UTF-8格式下是可以看到2个分隔符的。

在安装SQL Server 2017的AdventureWorks示例数据库时遇到PostalCode列的大容量加载数据转换错误。问题源于CSV文件中某些行的PostalCode超过15个字符限制,且与分隔符数量有关。通过检查并修正CSV文件中分隔符数量和编码问题,成功解决了加载错误。
822

被折叠的 条评论
为什么被折叠?



