【问题标题】:Connection String for dynamic OLE DB Destination in SSDT/SSIS for SQLServer2014适用于 SQLServer2014 的 SSDT/SSIS 中动态 OLE DB 目标的连接字符串
【发布时间】:2016-03-13 12:47:53
【问题描述】:

我是 SQL Server 的新手,但不是一般的 SQL 或编程。我一直在阅读可用于在 SSDT/SSIS 中设置 For each 循环的在线文档和教程,该循环遍历文件夹中的一系列平面文件,并为每个文件创建一个同名的 DB 对象。

循环工作,除了为 OLE DB 目标管理器设置连接字符串。我的服务器名为“OLEGS_LAPTOP”,数据库名为“足球数据”,我正在使用以下连接字符串:

"Provider=SQLNCLI11.0;Server=OLEGS_LAPTOP;Source=(local);Initial Catalog="+ @[User::FileFound] + "Football Data"+";Integrated Security=SSPI;Auto Translate=False;"

这里,@[User::FileFound] 代表在平面文件连接管理器中设置的变量,用于循环访问我选择的本地文件夹中的文件。当我尝试将此连接字符串用于 OLE DB 对象时,我收到以下错误:

TITLE: Package Validation Error
------------------------------

Package Validation Error

------------------------------
ADDITIONAL INFORMATION:

Error at Data Flow Task [OLE DB Destination [10]]: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80004005  Description: "Unspecified error".
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80004005  Description: "The metadata could not be determined because every code path results in an error; see previous errors for some of these.".
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80004005  Description: "Invalid object name 'dbo.OLE DB Destination'.".

Error at Data Flow Task [OLE DB Destination [10]]: Failed to open a fastload rowset for "[dbo].[OLE DB Destination]". Check that the object exists in the database.

Error at Data Flow Task [SSIS.Pipeline]: "OLE DB Destination" failed validation and returned validation status "VS_ISBROKEN".

Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation.

Error at Data Flow Task: There were errors during task validation.

 (Microsoft.DataTransformationServices.VsIntegration)

------------------------------
BUTTONS:

OK
------------------------------

谁能告诉我我需要在字符串中进行哪些更改才能获得所需的结果?

谢谢

到目前为止给出的进一步答案/支持:

我现在收到的错误信息是:

TITLE: Package Validation Error
------------------------------

Package Validation Error

------------------------------
ADDITIONAL INFORMATION:

Error at Data Flow Task [OLE DB Destination [10]]: A destination table name has not been provided.

Error at Data Flow Task [SSIS.Pipeline]: "OLE DB Destination" failed validation and returned validation status "VS_ISBROKEN".

Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation.

Error at Data Flow Task: There were errors during task validation.

 (Microsoft.DataTransformationServices.VsIntegration)

------------------------------
BUTTONS:

OK
------------------------------

【问题讨论】:

    标签: sql sql-server ssis sql-server-data-tools


    【解决方案1】:

    看起来字符串“OLE DB Destination”以某种方式进入了table\view 映射(第一个屏幕截图),而[dbo].[OLE DB Destination] 作为表名出现了。也许您已经在OLE DB Destination 属性窗口的OpenRowset 属性中用这个字符串替换了表名(第二个屏幕截图)。


    稍后编辑

    为了能够从变量中获取表名(假设您有这样的变量并分配了表名),您需要将OLE DB DestinationAccessMode 属性更改为OpenRowset From Variable 并指定变量名在OpenRowsetVariable 属性中(见下图)

    【讨论】:

    • 您好,感谢您的回复。那我应该把什么作为我的表名放在 DB 目标编辑器中呢?我试过使用'@[User::FileFound]',但编辑器不会接受...
    • 我强烈建议您第一次尝试让您的解决方案在没有任何动态变量映射的情况下工作。连接字符串根本不包含表名。它只包含服务器名称和数据库名称。
    • 检查帖子中的更改
    • 我让它与循环中的平面文件输入一起工作,但在 OLE DB 对象中列出了一个静态名称。这会将每个平面文件附加到该数据库表名,然后变得庞大
    • 我已根据您的上述指南修改了数据库连接属性,现在出现错误提示未提供表名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多