在部分任务流源中使用变量

时间:2014-10-23 14:52:20

标签: visual-studio-2013 ssis sql-server-2012

有没有办法在任务流中使用from部分中的变量(例如SELECT myColumn1 FROM?) - 来源而不必先给变量一个有效的默认值?

更确切地说,在我的情况下,我从表中获取表名,然后使用控制工作流来预览表名列表,然后从内部调用工作流,然后从这些中获取数据每个表。在这个工作流程中,我有前面提到的SELECT语句。

为了让它正常工作,我不得不将变量设置为有效的默认值(在包级别上),否则我无法创建工作流本身(因为无法创建数据源因为选择无效)默认值)。

所以我的问题是:在这种情况下,我是否可以使用变量的有效默认值?

数据表: 在数据流中选择的不同表在列方面具有完全相同的表(因此列,列的命名和列的数据类型)。只有它们内部的数据是不同的(因此它的客户A,客户B的数据......)。

2 个答案:

答案 0 :(得分:2)

  1. 创建第二个变量。设置其Expression以创建完整 选择语句,使用第一个变量的值。
  2. 在数据源中,使用“来自变量的SQL命令”选项 数据访问模式属性。
  3. 如果可以,请为您在步骤中创建的变量设置默认值
    1. 这样可以更轻松地填写数据源中的列。
  4. 如果您无法使用变量的默认值,请设置数据 Source的ValidateExternalMetadata属性为False。
  5. 您可能必须使用高级编辑器打开数据源 手动创建输出列。

答案 1 :(得分:2)

您很幸运,因为使用SSIS实现这一点非常简单。

对于大多数人来说,基本问题在于它们来自SSIS,就像它仍然是DTS,你可以在数据流中做任何你想做的事情。他们抛弃了DTS的极端灵活性,转而支持原始处理性能。

您无法在SQL语句中参数化表。它根本不被允许。

相反,人们采用的方法是使用Expressions。在您的情况下,假设您创建了两个类型为String的变量,@[User::QualifiedTableName]@[User::QuerySource]

假设[dbo]。[spt_values]被分配给QualifiedTableName。循环遍历表名时,您将该值分配给此变量。

"技巧"是将表达式应用于@ [User :: QuerySource]。制作表达

"SELECT T.* FROM " + @[User::QualifiedTableName] + " AS T;"

这允许您在其他变量的值发生更改时更改表名。

在您的数据流中,您将更改OLE DB源以由包含在变量中的查询驱动,而不是传统的表选择。

如果您想要一个我使用QuerySource来驱动数据流的示例,那么mixing an integer and string in an ssis derived column

就有一个示例