【问题标题】:SSIS OLEDB Command fails - unknown errorSSIS OLEDB 命令失败 - 未知错误
【发布时间】:2017-02-27 20:16:22
【问题描述】:

当我尝试在 SSIS 的 OLEDB 命令中运行简单查询时,我不断收到无法解释的错误(见下文)。

我的查询在 SQL Server 中运行良好,我进行了一些调整以使其更简单以确保它运行,但无济于事。

DECLARE @Gender [nvarchar](6)
DECLARE @Ready [nvarchar](12)
DECLARE @DOB [datetime]

SET @Gender=?
SET @Ready=?
SET @DOB=?


IF @Gender = 'M'
    SET @Gender='Male'
IF  @Gender = 'F'
    SET @Gender='Female'
IF @Ready='Y'
    SET @DOB=NULL

INSERT INTO [dbo].[PHI_CLIENT_PROFILES]
([col43],
[col13],
[col22],
[col10],
[origin]
)
VALUES
(@DOB, @Gender, ?, ?, ?)

错误信息:

验证错误。数据流任务:数据流任务:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码: 0x80004005。 OLE DB 记录可用。资料来源:“微软 OLE DB SQL Server 提供程序”Hresult:0x80004005 描述:“语法 错误或访问冲突”

【问题讨论】:

  • 您是否在参数映射选项卡上提供了 7 个变量?
  • @billinkc 不,我不是因为那个错误,参数页面将 NOT 刷新。我尝试了 100 种不同的变体,并逐行添加/删除了我的代码,因此参数页面已过时(由于我的逐行方法,它显示了 1 个参数)。在破解代码之前,参数页面不会显示任何内容
  • @billinkc 我还应该补充一点,问题似乎出在可变部分上。 SSIS OLEDB COMMAN 是否接受变量?我尝试了一个更简单的代码并且它有效,但我对这项任务很陌生。
  • 我会首先用实际值替换所有参数,看看是否执行,然后一个一个地恢复它们,看看它是否是一个特定的参数造成了问题。
  • @GiorgosAltanis 感谢您的建议。我就是这样做的,但不幸的是,唯一可行的方法是摆脱所有声明和集合。我很确定我之前在更简单的情况下使用过 DECLARE/SET - 但由于某种原因它在这里不起作用

标签: sql-server ssis sql-server-2012 ssis-2012 oledbcommand


【解决方案1】:

我不知道你的意图是什么,但除非你需要插入的身份或调用一些遗留函数,否则不需要 OLE DB Command。应避免使用此转换仅对单个表执行 SQL 插入语句,因为它将作为单独的批处理执行每一行。请尝试使用目标组件。

添加 derived column 组件并使用内置表达式功能。示例:

DerivedGender :    
    [Gender] == "M" ? "Male" : "Female"
DerivedDOB :
    [Ready] == "Y" ? NULL(DT_DBTIMESTAMP) : [DOB]
...

完成转换后,使用 OLE DB 目标组件。

在某些情况下,可能值得检查一下 Foreach Loop Container 是否可以解决任务。

【讨论】:

  • 非常感谢 - 我其实不知道这个任务的用途。
  • 只有一件事,你的情况是不准确的:如果性别是 M 然后是男性,如果性别是 F 然后是女性(没有别的),你怎么能表达出来?谢谢
  • [Gender] == "M" ? "Male" : [Gender] == "F" ? "Female" : "Invalid"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2017-10-21
  • 2011-05-04
相关资源
最近更新 更多