【问题标题】:How to Dynamically use a table from SSIS expression如何动态使用 SSIS 表达式中的表
【发布时间】:2021-10-19 19:32:54
【问题描述】:

我有变量 [User::Tablename1] 字符串,我需要一个可以在运行时评估的表达式来检查,

If Tablename1 is 'Customer'
       select * from dbo.Customer where CustID = 1
Else If Tablename1 is any other tablename
       "select * from dbo"**Tablename** where ProdID= 1

我关心的是如何使表名动态和过滤列。

【问题讨论】:

  • 使用表达式。我猜你想要这个在 SQL 源中?请记住,这些表必须具有相同的列(包括数据类型),否则 SSIS 将由于映射而引发错误。
  • 我的想法是默认将变量设置为第二个查询select * from dbo**Tablename** where ProdID= 1 并使用表达式检查是否[User::Tablename1] == 'Customer',然后如果表达式为真则设置第一个查询...在数据库源/目标上只需使用一个变量。

标签: sql sql-server ssis


【解决方案1】:

您应该在 Select 变量的表达式中使用这些文本创建两个变量:

1: "select * from dbo."+[User::Tablename1]+ "where ProdID= 1"
2: "select * from dbo.Customer where CustID = 1"

然后您可以使用 sql 命令文本来获取您的表名,并将它们作为输入传递给每个循环容器,以将其设置为您的 [User::Tablename1] 变量。 在 for each 中,您可以使用一个表达式任务将“客户”与您的 [User::Tablename1] 值进行比较。 最后,通过使用表达式任务按钮的绿色箭头,您可以使用结果输出设置约束。如果结果是,您可以执行第二次选择,否则您使用任何给定的表名执行第一次选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多