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)
答案 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数据库。