Visual Studio 2013 SSIS OLE DB目标(通过连接管理器访问)SQL命令问题

时间:2016-01-18 14:38:25

标签: visual-studio-2013 ssis ms-access-2010 bids

Afternoon Folks,

我们正在使用Visual Studio 2013并拥有我们正在创建的SSIS包。我们有一个简单的数据流任务,它基本上从SQL获取一些数据并推送到Access数据库。它有三个DFD流程项目:

我有一个OLE DB源(通过select语句获取SQL) - >数据转换(将SQL数据类型转换为访问权限) - > OLE DB目标(访问数据库)

选择SQL并将其转换的步骤正常。

我们遇到的问题是我们用来更新Access 2010数据库的SQL命令。

我们尝试运行并创建一个简单的UPDATE语句来使用硬编码数据更新几个字段,但这不会更新。我们还尝试创建存储过程,然后在OLE目标编辑器中的SQL命令行中执行它。

我们可以从网上的帖子看到我们可以在Access 2010中创建一个程序并使用它。我们还使用Native OLE DB \ Microsoft Office 12.0访问数据库引擎OLE DB提供程序。此连接成功测试。

我们可以在SQL命令行中编写一个SELECT语句,这会拉回数据。我们似乎对UPDATE和/或Create过程有问题。反过来,我们无法填充映射。映射显示目标框,但此处不显示任何字段。

我们在互联网上有一个很好的环顾,但我们正在努力寻找解决方案。

以下是我们尝试使用的更新语句形式的代码示例。

UPDATE ReferenceFields 
     INNER JOIN Addresses 
     ON ReferenceFields.ID = Addresses.ID
          SET ReferenceFields.Reference2 =CustomerName,
                 ReferenceFields.Reference3 = telephone           
WHERE Addresses.UPRN = 12345678910 

如果我解析查询它是成功的但是当我选择Mappings时会显示一个警告......

  

数据流任务错误[OLE DB目标[136]]:无列   SQL命令返回信息

https://msdn.microsoft.com/EN-US/library/office/ff845861.aspx

https://msdn.microsoft.com/en-us/library/ms141044.aspx

SSIS OLEDB destination with SQL command (Insert if not exists)

1 个答案:

答案 0 :(得分:-1)

过了一段时间,我自己设法回答了这个问题。

我已经为需要更新的每个字段添加了唯一参数,并使用@ char来设置它。

UPDATE ReferenceFields 
     INNER JOIN Addresses 
     ON ReferenceFields.ID = Addresses.ID
          SET ReferenceFields.Reference2 = @CustomerName,
              ReferenceFields.Reference3 = @telephone
WHERE UPRN = @UPRN

这将运行代码并更新MS Access数据库。