在SSIS Select和From子句中使用变量

时间:2017-02-06 10:45:17

标签: sql-server ssis

我正在进口几家商店的销售和购买COST,其中每家商店都有自己的包装(利用并行)。设置它可能相当耗时,因为我必须进入每个存储OLE DB Source并调整FROM子句以捕获存储具有单独的数据库(存储编号的数据库) 9999是[database].[dbo].[sales9999])。

我还想在每个商店的Select子句中使用商店编号。例如,对于客户9999,我需要Select 9999 AS StoreKey作为列。

因此我想这样:

SELECT ? as StoreKey, a.saleprice, b.purchasecost
FROM ? AS a JOIN ? AS b ON a.ID = b.ID 

在我的OLE DB源中,并将?与相应的参数匹配。但是当我试图实现这个时,我收到的错误是参数只能在Where子句中使用,我不需要。

有人有任何想法吗?

问候,

1 个答案:

答案 0 :(得分:1)

你当然可以借助于被评估为表达式的Variable来做到这一点。例如,您的select语句可以写为以下变量表达式:

"SELECT N'"+@[User::strStoreKey]+"' as StoreKey, a.saleprice, b.purchasecost 
    FROM "+@[User::strTableName]+" AS a JOIN "+@[User::strAnotherTable]+"
    AS b ON a.ID = b.ID"  

这里的变量必须使用String数据类型或表达式类型来定义 使用这种方法时要注意几点:

  1. 所有Select查询的结果集必须在列,名称和数据类型方面相同。
  2. 您必须提供默认值来查询构建变量,即strStoreKeystrTableNamestrAnotherTable,这会导致有效查询。否则,您的包将在保存时验证失败。
  3. 您的数据流的属性设置如下DelayValidation=True。这将在执行前验证数据源或目标,而不是在程序包加载时验证。
  4. 当目标表名称设置为变量时,您也可以将此方法用于变量目标;同样的限制适用。