【问题标题】:Warning: Truncation may occur due to retrieving data from database column警告:由于从数据库列中检索数据,可能会发生截断
【发布时间】:2019-08-25 07:55:02
【问题描述】:

我正在使用 SSIS 从 Oracle 导入数据集。 SSIS 给了我一个警告:

由于从长度为 28 的数据库列“第三方”检索数据到长度为 25 的数据流列“第三方”,可能会发生截断。”

警告没有意义。目标是一个 SQL Server 数据库,其中属性为 [Third Party]nvarchar(255)

为什么这个工具会给我这个奇怪的错误?

我已尝试更改nvarchar(max) 的长度。这并没有什么不同。

select 
    case 
        when XTNL_HOS_FLG = 1 and VND_MG_APL_FLG = 0 
           then 'Host'          
        when XTNL_HOS_FLG = 0 and VND_MG_APL_FLG = 1 
           then 'Support or Manage' 
        when XTNL_HOS_FLG = 1 and VND_MG_APL_FLG = 1 
           then 'Host and (Support or Manage)'  
        else ''
    end  as "Third Party"
from 
    table1

【问题讨论】:

  • 尝试在 sql 命令中进行转换,这比从高级编辑器更改类型更好

标签: sql-server oracle oracle11g ssis ssis-2012


【解决方案1】:

右键单击源目标,在数据流任务中查看“显示高级编辑器”。 然后转到“输入和输出属性”选项卡并检查列的长度。

对目标目标执行相同操作。

根据您获取数据的方式,列的类型和长度与数据库不同。

【讨论】:

  • 更推荐在 SQL 命令中指定列长度,因为如果查询中提供的值发生变化,Column 属性可能会发生变化
  • 如果您有一个文本或 CSV 文件来导入数据,我总是建议您通过查找最大列长度并使用 Unicode 导入,然后在 SQL Server 中进行转换。这样可以省去很多麻烦。
【解决方案2】:

由于您使用 SQL 命令作为源,您可以编辑命令并强制源列长度并帮助 OLEDB 源识别它。您可以使用 CAST 函数来做到这一点:

select CAST(
    case 
        when XTNL_HOS_FLG = 1 and VND_MG_APL_FLG = 0 
           then 'Host'          
        when XTNL_HOS_FLG = 0 and VND_MG_APL_FLG = 1 
           then 'Support or Manage' 
        when XTNL_HOS_FLG = 1 and VND_MG_APL_FLG = 1 
           then 'Host and (Support or Manage)'  
        else ''
    end AS NCHAR(255)) as "Third Party"
from 
    table1

【讨论】:

  • @user716255 尝试删除旧的源组件并使用 thi sql 命令添加一个新组件。
【解决方案3】:

我是这样做的:我使用命令 left(column,n) 来匹配输出文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多