我有一个包裹。它有一个输入到 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 列名称上来轻松确认这一点。
关于c# - SSIS:列大小未根据查询更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939234/