我读了这个帖子: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]
答案 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 变量中。