2017-02-27 160 views
0

当我尝试在SSIS'OLEDB命令中运行简单查询时,我总是收到无法解释的错误(请参阅下文)。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说明:“语法 错误或访问冲突”

+1

您是否在参数映射选项卡上提供了7个变量? – billinkc

+0

@billinkc不,我不是因为那个错误,param页面将不*刷新。我尝试了100个不同的虚拟变量,并且逐行添加/删除了我的代码,因此param页面已过时(由于我的逐行方法,它显示1个参数)。在破解代码之前,param页面不会显示任何东西 – LearnByReading

+0

@billinkc我还应该补充说,问题似乎在可变部分。 SSIS OLEDB COMMAN是否接受变量?我尝试了一个更简单的代码,它工作,但我很新,这个任务。 – LearnByReading

回答

3

我不知道你正打算在那里,但除非你需要插入的身份或调用一些传统功能,则不需要OLE DB Command。应该避免使用这种转换来仅执行SQL插入语句到单个表,因为它会将每行作为单独的批处理执行。改为尝试一个目标组件。

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

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

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

在某些情况下,可能需要检查是否可以解决任务。

+0

非常感谢 - 我实际上并不知道使用此任务。 – LearnByReading

+0

但是,只有一件事,你的情况是不准确的:如果性别是M,那么男性,如果性别是F,那么女性(没有别的),你怎么表达?谢谢 – LearnByReading

+1

'[Gender] ==“M”? “男”:[性别] ==“F”? “女”:“无效” –