Ssis SSI将datetime变量与数据流中的varchar匹配
我有一个表,其中有一列以varchar(10)格式存储日期,如Ssis SSI将datetime变量与数据流中的varchar匹配,ssis,ssis-2008,Ssis,Ssis 2008,我有一个表,其中有一列以varchar(10)格式存储日期,如'20190101'。我在SSIS中有一个变量定义为DateTime格式。现在我想在SSIS OLE DB数据流源中匹配值,格式为SELECT*FROM table where date=CONVERT(varchar(10),?,112) 看起来转换没有正常工作;数据流中不会弹出符合条件的数据 那么,这个查询有什么问题(将其放入SSMS时,结果看起来很好),以及如何调试它(不可能使用类似于数据源中表中的SELECT CAST(?AS
'20190101'
。我在SSIS中有一个变量定义为DateTime格式。现在我想在SSIS OLE DB数据流源中匹配值,格式为SELECT*FROM table where date=CONVERT(varchar(10),?,112)
看起来转换没有正常工作;数据流中不会弹出符合条件的数据
那么,这个查询有什么问题(将其放入SSMS时,结果看起来很好),以及如何调试它(不可能使用类似于数据源中表中的SELECT CAST(?AS varchar(10))的查询来调试它)
(PS:我最不想做的事情是定义另一个字符串变量来处理)。原因是SSIS数据源在根据运算符的另一侧确定参数类型时进行了隐式转换。请尝试此测试:
dateTime
变量从表中选择1,其中?>1
从“1”所在的表中选择1
从其中的表中选择1?>日期列
从sys.dm\u exec\u query\u stats中选择前50个t.text,s.*
交叉应用sys.dm_exec_sql_text(sql_句柄)t
t.text喜欢什么
按上次执行时间描述的订单
您可以找到参数的解释方式:
(@P1 int)从表中选择1,其中?>1
(@P1 varchar(8))从表中选择1,其中?>'1'
(@P1 datetime)从表中选择1,其中?>date\u col
换句话说,SQL命令将解释传入参数的类型,而不管其原始类型是什么
因此,在我的问题中,dateTime
参数首先以未知格式隐式转换为varchar
,然后我们尝试将其转换为指定的date
类型:
从日期=转换的表格中选择*(varchar(10),'2019年1月1日12:00:00',112)