SSIS错误代码DTS_E_OLEDBERROR 0x80040E21强制转换规范的字符值无效

时间:2018-06-10 18:04:01

标签: sql-server ssis etl

我是SSIS的新手,刚刚开始尝试。我试图弄清楚如何将参数从ssis项目传递到项目中的sql语句。我有一个在OLE DB数据源中定义的SQL脚本,其数据源的访问模式是SQL命令。在where子句中,我的日期介于何处?和?并创建两个项目级参数,startdate和enddate,enter image description here

我希望在运行时读入where子句。当我运行包时,我收到此错误

错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E21。 OLE DB记录可用。来源:" Microsoft SQL Server Native Client 11.0" Hresult:0x80040E21描述:"转换规范的字符值无效"。

不确定我哪里出错了。有人可以帮忙。

使用执行SQL任务,我的脚本在ole db source connector enter image description here

这就是我的变量?参数

enter image description here

1 个答案:

答案 0 :(得分:0)

部分原因是与日期的铸造问题。在SSIS中,似乎日期格式为yyyymmdd,不会像在t-sql中那样自动转换为日期数据类型,因此它会抛出一个" Microsoft SQL Server Native Client 11.0" Hresult:0x80040E21描述:"转换规范的字符值无效"。

为了解决这个问题,我创建了两个变量startdate和enddate,并使用表达式将我的yyyymmdd格式的项目级参数$Project::startdate$Project::enddate转换为日期数据类型,如SUBSTRING(@[$Project::startdate],1,4) + "-" + SUBSTRING(@[$Project::startdate],5,2) + "-" + SUBSTRING(@[$Project::startdate],7,2)

enter image description here

然后通过新变量映射到我的SQL脚本中的参数,如下所示:

enter image description here

相关问题