我有一个SSIS包,我正在尝试将数据从Excel文件源加载到OLE DB目标。我想将文件名加载到目标表中,而不是原始文件名的一部分。
任何人都可以为此提供一些提示吗?
答案 0 :(得分:0)
如果您不想参数化,则使用“脚本”任务捕获“连接字符串”,然后使用“子串”从“连接”字符串中提取ExcelFileName。
以下是步骤:
在脚本任务中使用此脚本
public void Main()
{
// TODO: Add your code here
ConnectionManager con = Dts.Connections["EX_SRC_CON"];
string conStr = con.ConnectionString;
int firstCharacter = conStr.LastIndexOf("\\");
int lastCharacter = conStr.IndexOf(".xlsx");
string fileName = conStr.Substring(firstCharacter + 1, (lastCharacter - (firstCharacter + 1)));
Dts.Variables["User::FileName"].Value= fileName;
Dts.TaskResult = (int)ScriptResults.Success;
}
请注意,“EX_SRC_CON”是您的Excel连接管理器,仅此而已,我们将提取Excel文件名。从脚本中,您可以看到我们正在将Excel文件写入字符串“FileName”
接下来,将脚本任务连接到数据流任务(DFT)。在DFT中,在Excel Source中,选择数据访问模式:“SQL Command”并使用以下脚本
SELECT * ,? 来自[PolicyList $]
PolicyList $是您的工作表名称,我们需要将变量“FileName”映射到?在参数选项卡下。
接下来,将Excel源中的列连接到OLE DB目标。