我正在尝试将一些数据从一个 SQL Server 传输到另一个 SQL Server,以便我可以重新设计我认为有问题的数据模型。 我使用 SSMS 和任务 > 导出 > SSIS 包来提取平面文件,然后在其他服务器上再次导入它们。
我收到这条消息
文本被截断或者一个或多个字符在目标代码页中不匹配
导出和导入都使用相同的代码页...
1252 (ANSI - Latin I)
DTX 文件具有元素
DTS:CodePage="1252"
我做错了什么?
您有一个 2 步过程:将数据导出到平面文件,然后从平面文件导入数据。
通过向导创建的导出到平面文件将创建一个具有正确长度的平面文件,因为它将使用 SQL Server 中的元数据存储来指定所述数据。
从平面文件导入(也是通过向导创建的)不了解有关原始表规范的任何信息。除非您另有说明,否则它将默认猜测平面文件中的所有内容都是 50 个字符。
在“高级”选项卡上,这将列出列,选择任何单个列将允许您修改数据类型。我“知道”Col1 应该是 varchar(100),所以我将 50 更改为 100。对所有列重复此操作
另一种选择是让 SSIS“猜测”。这可能是一个混合包,因为它将查看 N 行(默认为 200 行)
如果是我,我会将其增加到更大的值,比如 1000 行,也许 10000 行。
当我在数据库中有数据时,我可以分析它并做出诸如“这个整数适合tinyint域”之类的决定。如果我让 SSIS 分析器做出该决定,则第 1001 行或第 10001 行的值将不可避免地破坏小尺寸假设。
由于您使用的是向导,因此您必须重新启动任务、导入数据、查找文件等的整个单击路径。这将允许您以最少的时间通过磁盘的“硬”部分进入数据库可能的故障路径