SSIS OLEDB命令失败 - 未知错误

时间:2017-02-27 20:16:22

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

当我尝试在SSIS的OLEDB Command中运行简单查询时,我一直遇到无法解释的错误(见下文)。

我的查询在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记录可用。资料来源:“Microsoft OLE DB   SQL Server的提供程序“Hresult:0x80004005描述:”语法   错误或访问冲突“

1 个答案:

答案 0 :(得分:3)

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

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

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

执行转换后,使用OLE DB目标组件。

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