【发布时间】:2018-07-05 09:05:21
【问题描述】:
在我正在编写的 SSIS 包中,我有一个 CSV 文件作为源。在 Connection Manager General 页面上,它有 65001 作为代码页面(我正在测试一些东西)。未检查 Unicode。
这些列映射到带有 varchar(以及其他)列的 SQL Server 目标表。
目的地出错:无法处理列“columnname”,因为为其指定了多个代码页(65001 和 1252)。
由于其他应用程序使用它,我的 SQL 列必须是 varchar,而不是 nvarchar。
然后,在 Connection Manager 常规页面上,我将代码页面更改为 1252 (ANSI - Latin I),然后确定,但当我再次打开它时,它又回到了 65001。如果(只是为了测试)我检查 Unicode 并没有什么区别。
请注意,所有这一切都是在 CSV 文件和 SQL 表添加和删除列(用户,你知道的)之后开始发生的。在此之前,我没有任何问题。是的,我在高级编辑器中刷新了 OLE DB 目标。
这是 SQL Server 2012 以及随附的任何版本的 BIDS 和 SSIS。
【问题讨论】:
-
尝试删除并读取平面文件连接管理器
-
我想避免这种情况,并为数百列重新定义列的类型,然后将它们重新映射到 SQL 表。但我会试一试。
-
我没有为这个属性做过这个,但是我在其他地方做过这个。使用记事本打开 dtsx 并在其中编辑属性。
-
dtsx 或 commgr 文件中没有值为 65001 的属性。我从头开始,一个新的解决方案,但它仍然强制代码页为 65001。一定是数据中的某些东西。
-
平面文件代码页为 65001 = Unicode (UTF-8),您无法更改它,因为平面文件连接管理器中的代码页属性设计为
Specify the code page for non-Unicode text.查看我的答案以获取更多详细信息.
标签: sql-server csv encoding ssis etl