64 unicode types ssis sql-server-2005 non-unicode
我使用SQL Server 2008在我的计算机上创建了一个dtsx包.它将数据从分号分隔的csv文件导入到一个表中,其中所有字段类型都是NVARCHAR MAX.
它适用于我的计算机,但它需要在客户端服务器上运行.每当他们使用相同的csv文件和目标表创建相同的包时,他们就会收到上述错误.
我们已经逐步完成了包的创建,一切似乎都没问题.映射都是正确的,但是当它们在最后一步中运行包时,它们会收到此错误.他们正在使用SQL Server 2005.
任何人都可以建议从哪里开始寻找这个问题?
小智 107
从任何非unicode源转换为unicode SQL Server表的问题可以通过以下方式解决:
Eri*_*ric 14
在某些时候,您正在尝试将nvarchar列转换为varchar列(反之亦然).
而且,为什么一切(据说)nvarchar(max)?如果我看过一个,这就是代码味道.您是否了解SQL Server如何存储这些列?它们使用指向实际行存储列的指针,因为它们不适合8k页面.
非Unicode字符串数据类型:
对文本文件使用STR,对SQL Server列使用VARCHAR.
Unicode字符串数据类型:
对文本文件使用W_STR,对SQL Server列使用NVARCHAR.
问题是您的数据类型不匹配,因此转换过程中可能会丢失数据.
小智 8
两个解决方案:1-如果目标列的类型是[nvarchar],则应该更改为[varchar]
2-将"派生列"组件添加到SSIS包并添加具有以下表达式的新列:
(DT_WSTR,«length»)[ColumnName]
Length是目标表中列的长度,ColumnName是目标表中列的名称.最后在映射部分,您应该使用这个新添加的列而不是原始列.
不确定这是否是SSIS的最佳实践,但有时我发现当您想要进行此类活动时,他们的工具有点笨拙.
您可以在查询中转换数据,而不是使用它们的组件
而不是做
SELECT myField = myNvarchar20Field
FROM myTable
Run Code Online (Sandbox Code Playgroud)
你可以做到
SELECT myField = CONVERT(VARCHAR(20),myNvarchar20Field)
FROM myTable
Run Code Online (Sandbox Code Playgroud)
此解决方案使用IDE进行修复:
Data Conversion如下所示向您的数据流添加一个项目;Data Conversion项目,然后如下所示进行设置:DB Destination项目,单击Mapping,并确保您输入的列实际上与[您的列名]的副本中的输入相同,实际上是Data Conversion输出而不是DB Source输出(请注意此处)。这是屏幕截图:就是这样..保存并运行..
| 归档时间: |
|
| 查看次数: |
244873 次 |
| 最近记录: |