c# - SSIS:列大小未根据查询更改

标签 c# tsql visual-studio-2015 ssis

我有一个包裹。它有一个输入到 Script Component 中的查询。

在查询中,我从表中选择一个 varchar(8) 列,然后我 CAST(myDateCol AS varchar(10))

SELECT 
    myPK, 
    CAST(myDateCol AS varchar(10)), --myDateCol defined as varchar(8)
    myOtherCol
FROM 
    MyServer.MySchema.MyTable

在我的脚本中,我试图将两个字符添加到 Input0 中的 Row.myDateCol 但我得到了一个 Buffer Error 并且它在 myDateCol 的属性 setter 中。您可以看到它将属性设置为 8 个字符,但之后出错。

我所做的是添加一个带有 Length = 10 的输出列,设置它,并将其映射到包中的下一个组件,但这看起来有点傻。

有没有一种方法可以根据查询强制输入列的大小或者有没有一种方法可以让我手动强制刷新,以防程序包卡住了,我认为我'我在处理 varchar(8) 因为 CAST 操作是后来添加的吗?

附加信息:

Row.myDateCol = "20170404"
Row.myDateCol = "2017-04-04" // Errors out

最佳答案

这是 SSIS 的正常行为。当您创建使用 SQL 查询的数据源时,SSIS 将查看您的查询并为数据流构建元数据。如果您更改查询的结构,例如数字列或其名称,数据源将仅重新计算该元数据。

在不重命名列的情况下强制刷新数据类型的最简单方法是转到数据源编辑器的列页面,取消勾选,然后勾选可用外部列的顶部勾选框。这将取消选择所有列并重新选择它们,同时刷新元数据。您可以通过将鼠标悬停在下方部分列出的 External\Output 列名称上来轻松确认这一点。

enter image description here

关于c# - SSIS:列大小未根据查询更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939234/

相关文章:

c# - 基于开始/结束位置的字符串中的粗体选择性文本

c# - 让 linq 知道唯一的 ID

c# - DisplayFor() 显示从下拉列表中选择的内容

c# - ASP.NET 中将数据库中的行配置为在特定时间后删除的最佳方法

c++ - Visual Studio 诊断 - 内存使用快照显示 0 分配

visual-studio-2015 - 使用 Xamarin Forms 时找不到 Nuget 包

c# - boost proto vs c# 表达式树

sql - GROUP BY 同一列中的多个值

sql - 如何组织联合中的行

c# - Visual Studio 2015 添加服务引用