动态传递 Table 名称 - 使用来自变量的 SQL 命令

Dynamically Passing Table Names - using SQL Command from Variable

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

但是,在OLEDb源码编辑器中,当我选择使用SQL Command from Variable时,预览时出现如下错误提示:

HRESULT 异常:0xC0202009 数据流任务 [OLE DB 源 [37]] 出错:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:"Microsoft SQL Server Native Client 11.0" Hresult:0x80040E14 描述:"Statement(s) could not be prepared."。 OLE DB 记录可用。来源:"Microsoft SQL Server Native Client 11.0" Hresult:0x80040E14 描述:"Must declare the table variable "@".".

感谢您就此处可能出现的问题提供帮助。

以下是我设置的组件。

执行SQL任务:

SELECT name from sys.tables WHERE name like'%$Company Information'Order by name Result Set: Variable Name = User::IndivTableName; Result Name = 0; Data Type=Object

对于每个循环容器:

Enumerator: Foreach ADO Enumerator

ADO Object source variable: User::IndivTableName

Enumeration mode: Rows in the first table

(Is this needed?) Variable mappings: Variable = User::IndivTable; Index=0; Data Type = Object

字符串变量:

Variable Name: User::CompanyInformation

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

Evaluated Value: select [name],[address],[address 2],[city],[phone no_],[fax no_], [VAT Registration no_],[registration no_],[business type] from @[User::IndivTableName]

数据源编辑者:

Data Access Mode: SQL command from variable

Variable Name: User::CompanyInformation

Variable Value: select [name],[address],[address 2],[city],[phone no_],[fax no_], [VAT Registration no_],[registration no_],[business type] from @[User::IndivTableName]

ForEach ADO Enumerator 处的变量映射是强制性的,您的映射没问题。请将 User::IndivTable 变量的数据类型更改为字符串。

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

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

变量User::IndivTable名称包含DataTable,不能在表达式中使用。您遍历它并将第一列存储到 User::IndivTable 变量中。