Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS抛出了一个“;DTS“U E”U PRIMEOUTPUTFAILED“;使用Excel源的SSIS数据流中出错_Sql Server_Excel_Ssis_Etl - Fatal编程技术网

Sql server SSIS抛出了一个“;DTS“U E”U PRIMEOUTPUTFAILED“;使用Excel源的SSIS数据流中出错

Sql server SSIS抛出了一个“;DTS“U E”U PRIMEOUTPUTFAILED“;使用Excel源的SSIS数据流中出错,sql-server,excel,ssis,etl,Sql Server,Excel,Ssis,Etl,我正在开发一个SSIS进程,从Excel文件中提取数据并将其加载到SQL Server DB中 对于源文件中的每个工作表,我都有单独的数据流。Excel文件包含不同格式的数据(但也可能包含无效数据),因此我使用显式类型转换 对于日期,我在SQL语句中使用cdate(f1)作为f1构造(数字根据列的不同而变化),以防止SSI自行决定日期格式 这通常效果很好。但是,在某些情况下,当我尝试运行进程时,它会抛出一个错误,并且数据中存在非法值: [SSIS.Pipeline]错误:SSIS错误代码DTS_

我正在开发一个SSIS进程,从Excel文件中提取数据并将其加载到SQL Server DB中

对于源文件中的每个工作表,我都有单独的数据流。Excel文件包含不同格式的数据(但也可能包含无效数据),因此我使用显式类型转换

对于日期,我在SQL语句中使用
cdate(f1)作为f1
构造(数字根据列的不同而变化),以防止SSI自行决定日期格式

这通常效果很好。但是,在某些情况下,当我尝试运行进程时,它会抛出一个错误,并且数据中存在非法值:

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。这个 My_Excel_源上的PrimeOutput方法返回错误代码0x80040E21。 当管道引擎调用时,组件返回了故障代码 PrimeOutput()。故障代码的含义由 组件,但错误是致命的,管道已停止执行。 在此之前可能会发布错误消息,其中包含更多信息 关于失败

我没有其他错误

当我尝试在Excel源代码编辑器窗口中预览结果时,正如预期的那样,我确实获得了带有数据样本的数据网格。当存在非法数据时,将显示文本-这很好。在其他数据流中,返回值“1899-12-30”,我可以用它做任何我想做的事情

我试图将此列的数据类型显式定义为DT_DATE,但仍然得到错误。我将各种可能的属性设置与其他数据流(不会引发此错误)进行了比较,结果似乎完全相同。 我还尝试将Excel源组件的错误处理行为更改为“忽略失败”而不是“失败组件”——没有效果

我应该注意到,那里没有可能的资源问题。我只处理每张纸上的几行(最多几十行)

当源单元格包含非法值时,我希望Excel源组件返回值“1899-12-30”,而不是使数据流崩溃

谢谢,
David

如果您想让Excel控制日期解析,我会尝试使用一些SQL表达式

CASE 
  WHEN IsDate(f1) THEN CDate(f1)
  ELSE NULL 
END AS f1
因此,如果
f1
解析为date,则将其强制转换为date,否则返回NULL。 如果您愿意,可以使用您可能喜欢的任何sentinel值替换NULL,如
CDate('1899-12-30')

如果没有IsDate guard,Excel OLEDB连接器将执行您告诉它的操作—尝试将表达式强制转换为最新版本,但失败


测试每个单元格的强制转换是否工作以及在出现故障时显示文本的功能是Excel应用程序的一部分,而不是Excel OLEDB连接器的一部分。因此,我们需要在这里使用上面的CASE表达式来模拟它。

如果您想让Excel控制日期解析,我会尝试使用一些SQL表达式

CASE 
  WHEN IsDate(f1) THEN CDate(f1)
  ELSE NULL 
END AS f1
因此,如果
f1
解析为date,则将其强制转换为date,否则返回NULL。 如果您愿意,可以使用您可能喜欢的任何sentinel值替换NULL,如
CDate('1899-12-30')

如果没有IsDate guard,Excel OLEDB连接器将执行您告诉它的操作—尝试将表达式强制转换为最新版本,但失败


测试每个单元格的强制转换是否工作以及在出现故障时显示文本的功能是Excel应用程序的一部分,而不是Excel OLEDB连接器的一部分。因此,我们需要在这里使用上面的CASE表达式来模拟它。

您使用的是哪个SSIS/SSRS版本?VS 2012/11.0(取决于您如何看待它)。您使用的是哪个SSIS/SSRS版本?VS 2012/11.0(取决于您如何看待它)。感谢您的建议。案例构造似乎不适用于Excel源代码。我试图用
IIF(IsDate(f1),CDate(f1),NULL)
替换它,但是由于某种原因,
IsDate
部分总是返回0,所以我得到了NULL。谢谢你的建议。案例构造似乎不适用于Excel源代码。我试图用
IIF(IsDate(f1),CDate(f1),NULL)
替换它,但是由于某种原因,
IsDate
部分总是返回0,所以我得到了NULL。