当我尝试在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描述:”语法 错误或访问冲突“
答案 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
是否可以解决任务可能是值得的。