SSIS - 在任务的表达式中传递对象变量

时间:2012-08-17 00:43:52

标签: sql-server sql-server-2008 ssis

在我的SSIS包中(在Sql 2008 R2上),我有一个TransferObjectsTask任务,这个任务有一个名为DatabaseDetails的属性,它是DatabaseInfoCollection类型。我要做的是通过先在脚本任务中准备它并将其保存在对象类型的变量中,然后将此变量传递给TransferObjectsTask任务的DatabaseDetails属性,为此属性指定一个值。很简单,对吧?

但是,正如您可能已经猜到的那样,我不能这样做。当我在表达式中指定变量时,我得到......

“无法评估表达式/表达式中不支持变量的数据类型。”

我怎样才能解决这个问题?

由于表达式只有一个变量名,所以没有任何“评估”。如果您甚至无法为其指定变量,为什么任务会在表达式中公开属性?没有意义。

我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

您无法在表达式中引用对象。对象数据类型太通用了。您可以将任何内容推送到对象数据类型中。想象一下,将100个数据库的列表推送到对象变量(使其成为数组),然后将该变量传递给oledb连接管理器的InitialCatalog属性。连接管理器不仅不知道如何处理对象,而且即使它确实如此,也无法一次连接到100个数据库。

你到底想要做什么?我不熟悉TransferObjectsTask(自产品推出以来,我一直在做重要的SSIS工作)。这是自定义任务吗?它不包含在SQL 2012的控制流任务中。有一个Transfer SQL Server Objects任务。那是你指的是什么?如果是这样,Powershell或像Red Gate的SQL Compare这样的第三方工具将是一个更好的选择。 SSIS非常擅长ETL(在缓冲区中提取,转换,并从/向各种源和目的地加载数百/数十亿条记录)。尽管如此,它在管理任务方面有点笨拙。我永远不会将它用于简单的管理任务,如备份,架构更新部署或索引维护。

答案 1 :(得分:0)

将一个对象添加到表达式中是没有意义的。你怎么知道对象的结构。

您能更具体地了解您的目标吗? Transfer SQL Server Objects Task {{3}} 只需将对象从源传输到目标。你想在“DatabaseDetails”上设置什么(我无法找到这个属性)