Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
Ssis SSI将datetime变量与数据流中的varchar匹配_Ssis_Ssis 2008 - Fatal编程技术网

Ssis SSI将datetime变量与数据流中的varchar匹配

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

我有一个表,其中有一列以varchar(10)格式存储日期,如
'20190101'
。我在SSIS中有一个变量定义为DateTime格式。现在我想在SSIS OLE DB数据流源中匹配值,格式为
SELECT*FROM table where date=CONVERT(varchar(10),?,112)

看起来转换没有正常工作;数据流中不会弹出符合条件的数据

那么,这个查询有什么问题(将其放入SSMS时,结果看起来很好),以及如何调试它(不可能使用类似于数据源中表中的SELECT CAST(?AS varchar(10))的查询来调试它)


(PS:我最不想做的事情是定义另一个字符串变量来处理)。

原因是SSIS数据源在根据运算符的另一侧确定参数类型时进行了隐式转换。请尝试此测试:

  • 与包含日期(时间)列的表建立有效的SSIS数据源连接;创建
    dateTime
    变量
  • 将数据源切换到SQL命令,然后逐个键入以下查询:
  • 从表中选择1,其中?>1

    从“1”所在的表中选择1

    从其中的表中选择1?>日期列

  • 执行数据流
  • 在SSMS中,引用最近的会话:
  • 从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)