【问题标题】:Get DateTime value from DB into a variable in SSIS从 DB 获取 DateTime 值到 SSIS 中的变量中
【发布时间】:2017-08-01 03:24:35
【问题描述】:

我正在从 SQL 表中获取最后更新的日期,如下所示:

SELECT CONVERT(DATETIME, [Value]) AS LastModifiedDate 
FROM [WarehouseDB].[dbo].[tblWarehouseSettings]
WHERE Name = 'LastModifiedDate'

[Value] 是 varchar。

如下变量:

我正在使用执行 SQL 任务来获取日期值并将其分配给变量。我的执行 SQL 任务编辑器值设置如下:

任务成功执行,但没有从数据库中获取值。任务执行后分配给变量的值为 {12/30/1899 12:00:00 AM}

谁能弄清楚我在这里做错了什么?

【问题讨论】:

  • 因为 SSIS 值正在从 GETDATE() 更改为其他值 ...12/30/1899 12:00:00 AM 然后我认为 SSIS 正在工作。问题可能在 LastModifiedDate 列中。 CONVERT() 是否有可能产生空字符串或 NULLS?您介意将 WHERE 子句扩展为仅包含日期吗?你能添加一个AND ISDATE(CONVERT(DATETIME, [Value])) = 1。这会将结果集过滤为仅日期。另外,你的数据源是什么,SQL Server,Oracle?谢谢。
  • 我们可以看看完整的 SQL 语句吗?
  • 快速观察。您已指定 User:LastUpdatedOn 是一个输出参数。如果您将其直接传递给参数化查询并将结果分配回变量,则应将其设置为 Input。所以,如果我的 SQL 是 SELECT Column FROM Table Where ID=?,那么参数 1 是替换问号并设置为输入。
  • 好的,感谢您的更新。那么不需要参数映射。这是多余的,因为您的查询中没有参数。结果集返回单行和单列,应分配给 LastUpdatedOn 变量。这部分看起来配置正确。删除参数映射,然后重试。
  • 另外,我注意到在执行 SQL 任务的属性中您使用的是 DATETIMEOFFSET,我很确定这需要在退出时作为字符串变量分配。

标签: sql-server ssis etl


【解决方案1】:

有两件事导致了这个问题:

  1. 参数映射选项卡中,不需要将@[User::LastUpdateOn]指定为输出参数
  2. 您的 SQL 语句显示您正在将 [Value] 列转换为 DATETIMEOFFSET 而不是 DateTime 并且 DT_DBTIMESTAMPDateTime SQL 数据类型相关

参考文献

【讨论】:

  • DATETIMEOFFSET 在那里,因为我尝试了很多变化并且我截取了错误的屏幕截图。删除参数映射选项卡中添加的输出参数解决了问题!
  • @Hadi,只是出于兴趣,是否可以仅使用输出参数而不是使用结果集来实现相同的目标?我尝试这样做,但日期时间类型出现错误:stackoverflow.com/questions/70504271/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2012-09-28
相关资源
最近更新 更多