无法在SSIS表达式中将int转换为字符串

时间:2013-07-05 07:36:58

标签: sql ssis

我正在使用带有日期时间戳的文件名的下面的表达式。

(DT_I4)DATEPART("weekday", GETDATE() ) ==2  || (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ? 
Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls" :
Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"

这将给我以前的日期总是我的需要。

但是当我将文件名附加到此表达式时,它会给我以下错误 -

"FILENAME"+ 
 (DT_I4)DATEPART("weekday", GETDATE() ) ==2  || (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ? 
    Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls" :
    Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"

错误 - 数据类型“DT_WSTR”和“DT_I4”与二进制运算符“+”不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用强制转换运算符显式转换一个或两个操作数。

尝试设置二进制操作的结果类型“@ [User :: AnimalName] +(DT_I4)DATEPART(”weekday“,@ [System :: StartTime])”失败,错误代码为0xC0047080。

(Microsoft.DataTransformationServices.Controls)

1 个答案:

答案 0 :(得分:1)

正如它所述,你不能隐含地将整数和字符串值放在一起。解决方案是将整个三元运算符强制转换为DT_WSTR类型。是的,你确实将每个选项都转换为DT_STR,但你仍然将整个事件包装在一个演员表中。这很奇怪,但我之前遇到过同样的事情。

"FILENAME"+ 
(DT_WSTR, 20)
(
(DT_I4)DATEPART("weekday", GETDATE() ) ==2  
|| (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ? 
    Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls" 
:
    Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"
)