【发布时间】: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