动态传递表名 - 使用变量

时间:2016-08-06 11:16:33

标签: variables ssis foreach-loop-container

我读了这个帖子:SSIS : Dynamically passing Table names这正是我想要实现的。我到了创建字符串变量的地步。

但是,在OLEdb源代码编辑器中,当我选择从变量使用SQL命令时,预览会出现以下错误提示:

HRESULT的异常:0xC0202009 数据流任务错误[OLE DB源[37]]:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E14。 OLE DB记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14描述:“语句无法准备。”。 OLE DB记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14描述:“必须声明表变量”@“。”。

在这里可能会遇到什么问题。

以下是我设置的组件。

EXECUTE SQL TASK:

  

来自sys.tables的SELECT名称WHERE名称如'%$ Company Information'Order by name   结果集:变量名称= User :: IndivTableName;结果名称= 0;数据类型=对象

对于每个循环容器:

  

调查员:Foreach ADO调查员

     

ADO对象源变量:User :: IndivTableName

     

枚举模式:第一个表中的行

     

(这是否需要?)变量映射:Variable = User :: IndivTable;索引= 0;数据类型=对象

字符串变量:

  

变量名称:User :: CompanyInformation

     

表达式:   “选择[姓名],[地址],[地址2],[城市],[电话号码_],[传真号码],   [增值税登记号_],[登记号_],[业务类型]来自“+”@ [User :: IndivTableName]“

     

评估价值:   选择[姓名],[地址],[地址2],[城市],[电话号码_],[传真号码],   [增值税登记号_],[登记号_],[业务类型]来自@ [User :: IndivTableName]

数据源编辑器:

  

数据访问模式:来自变量

的SQL命令      

变量名称:User :: CompanyInformation

     

变量值:   选择[姓名],[地址],[地址2],[城市],[电话号码_],[传真号码],   [增值税登记号_],[登记号_],[业务类型]来自@ [User :: IndivTableName]

1 个答案:

答案 0 :(得分:0)

ForEach ADO Enumerator 的变量映射是必需的,您的映射是可以的。请将User :: IndivTable变量的数据类型更改为string。

将变量'User :: CompanyInformation'表达式更改为

"select [name],[address],[address 2],[city],[phone no_],[fax no_],  
[VAT Registration no_],[registration no_],[business type] from " + [User::IndivTable]  

变量 User :: IndivTableName 包含DataTable,因此无法在表达式中使用。迭代它并将第一列存储到 User :: IndivTable 变量中。