SSIS OLEDB 命令失败 - 未知错误

SSIS OLEDB Command fails - unknown error

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

我的查询 运行 在 SQL 服务器上很好,我做了一些调整以使其更简单地确保它 运行s,但无济于事。

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, ?, ?, ?)

错误信息:

Validation error. Data Flow Task: Data Flow Task: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Syntax error or access violation"

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

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

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

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

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