Visual studio 2013 在中使用来自部分任务流源的变量

Visual studio 2013 在中使用来自部分任务流源的变量,visual-studio-2013,ssis,sql-server-2012,Visual Studio 2013,Ssis,Sql Server 2012,是否有任何方法可以在任务流-源中使用from部分中的变量(例如SELECT myColumn1 from?),而不必首先为变量提供有效的默认值 更确切地说,在我的情况下,就是这样,我从一个表中获取表名,然后使用一个控制工作流来访问表名列表,然后从其中调用一个工作流,然后从每个表中获取数据。在这个工作流中,我有前面提到的SELECT语句 为了让它正常工作,我必须将变量设置为有效的默认值(在包级别),否则我无法创建工作流本身(因为无法创建数据源,因为没有默认值时select无效) 所以我的问题是:在

是否有任何方法可以在任务流-源中使用from部分中的变量(例如SELECT myColumn1 from?),而不必首先为变量提供有效的默认值

更确切地说,在我的情况下,就是这样,我从一个表中获取表名,然后使用一个控制工作流来访问表名列表,然后从其中调用一个工作流,然后从每个表中获取数据。在这个工作流中,我有前面提到的SELECT语句

为了让它正常工作,我必须将变量设置为有效的默认值(在包级别),否则我无法创建工作流本身(因为无法创建数据源,因为没有默认值时select无效)

所以我的问题是:在这种情况下,我不需要变量的有效默认值,是否有任何解决方法

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

  • 创建第二个变量。设置其表达式以创建完整的 Select语句,使用第一个变量的值
  • 在数据源中,对 数据访问模式属性
  • 如果可以,请为在步骤中创建的变量设置默认值
  • 这将使从数据源中填写列变得更加容易
  • 如果无法为变量使用默认值,请设置数据 源的ValidateExternalMetadata属性设置为False
  • 您可能必须使用高级编辑器和 手动创建输出列
  • 创建第二个变量。设置其表达式以创建完整的 Select语句,使用第一个变量的值
  • 在数据源中,对 数据访问模式属性
  • 如果可以,请为在步骤中创建的变量设置默认值
  • 这将使从数据源中填写列变得更加容易
  • 如果无法为变量使用默认值,请设置数据 源的ValidateExternalMetadata属性设置为False
  • 您可能必须使用高级编辑器和 手动创建输出列

  • 您很幸运,因为这是一件用SSI实现的小事

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

    不能在SQL语句中参数化该表。这是绝对不允许的

    相反,人们采取的方法是使用。在您的例子中,假设创建了两个字符串类型的变量,
    @[User::QualifiedTableName]
    @[User::QuerySource]

    假设[dbo].[spt_值]被分配给QualifiedTableName。当您循环表名时,您将把值赋给这个变量

    “诀窍”是将表达式应用于@[User::QuerySource]。表达

    "SELECT T.* FROM " + @[User::QualifiedTableName] + " AS T;"
    
    这允许您在其他变量的值更改时更改表名

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


    如果您想要一个我使用QuerySource驱动数据流的示例,那么

    上有一个示例,您很幸运,因为这是一个用SSI实现的小事情

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

    不能在SQL语句中参数化该表。这是绝对不允许的

    相反,人们采取的方法是使用。在您的例子中,假设创建了两个字符串类型的变量,
    @[User::QualifiedTableName]
    @[User::QuerySource]

    假设[dbo].[spt_值]被分配给QualifiedTableName。当您循环表名时,您将把值赋给这个变量

    “诀窍”是将表达式应用于@[User::QuerySource]。表达

    "SELECT T.* FROM " + @[User::QualifiedTableName] + " AS T;"
    
    这允许您在其他变量的值更改时更改表名

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


    如果您想了解我使用QuerySource来驱动数据流的示例,那么

    上有一个示例,列的计数和数据类型是否相同,或者每个源的计数和数据类型是否会改变?我用您的问题更新了问题。表是完全相同的(只是里面的数据不同,但是列,…是相同的)列的计数和数据类型是相同的,还是每个源都会改变?我用你的问题更新了这个问题。表是完全相同的(只有其中的数据不同,但列…是相同的)在我看到我将其放入变量的值而不是表达式列之前,使用SQL有一个很大的问题。在我看到我将其放入变量的值而不是表达式列之前,您的答案也是正确的(本质上与公认的答案相同)。最后,我选择了billinkccs答案,因为它还包括了如何构建这些表达式的示例。+1对于您的答案也是正确的(本质上与公认的答案相同)。我最终选择了billinkccs答案,因为它还包括了如何构建这些e