【发布时间】:2012-12-18 02:08:07
【问题描述】:
我有一个基本的 SSIS 作业,它运行 SQL 查询并将查询结果导出到 Excel 文件。 SSIS 作业已运行一年多没有问题,但本月开始失败(在验证阶段,执行前)并出现以下错误:
“从字符转换日期和/或时间时转换失败 字符串。”
SQL 查询本身是一个带有 WHERE 子句的简单 SELECT,用于指定从中收集记录的开始和结束日期范围。确定日期范围的查询部分如下:
DECLARE @RunDateTime datetime
DECLARE @RunDate datetime
DECLARE @StartDate datetime
DECLARE @EndDate datetime
DECLARE @Month int
DECLARE @Year int
DECLARE @strStartDate varchar(10)
SET @RunDateTime = GetDate()
SET @RunDate = CAST(@RunDateTime AS DATE)
IF DATEPART(d, @RunDate) = 16
BEGIN
SET @StartDate = DATEADD(d, -15, @RunDate)
SET @EndDate = @RunDate
END
ELSE
BEGIN
IF Month(@RunDate) = 1
SET @Month = 12
ELSE
SET @Month = Month(@RunDate) - 1
IF Month(@RunDate) = 1
SET @Year = Year(@RunDate) - 1
ELSE
SET @Year = Year(@RunDate)
SET @strStartDate = CAST(@Year AS VARCHAR) + CAST(@Month AS VARCHAR) + '16'
SET @StartDate = CONVERT(datetime, @strStartDate)
SET @EndDate = @RunDate
END
我可以将此代码从 SSIS 中取出并通过 SSMS 直接在服务器上执行,它可以正常工作,没有错误。但是,SSIS 作业无法运行它。事实上,我什至无法进入 SQL 命令的 OLE DB Source 对象并查看列元数据,每次都会出现上述错误。
我发现通过注释掉SET @StartDate = CONVERT(datetime, @strStartDate) 行,查询在SSIS 中再次起作用,但没有理由该行会引起问题。正如我所说,它已经工作了一年多,没有任何问题。我真的对此束手无策,无法理解为什么这项工作突然停止工作。
我确实与我的 DBA 确认过,他向我保证 SQL 服务器端没有任何更改,但我什至不知道该去哪里找他。
其他信息:
- SSIS 作业正在使用 SQLNCLI10.1 连接提供程序。 (2008 R2 SQL Server)
- 我尝试使用其他连接提供程序,但没有成功。
- 查询中涉及的日期列是日期时间类型
- 没有影响日期的区域/本地化更改。 (并且所有日期都是 ISO 格式)。
【问题讨论】:
-
您是否尝试过从头开始重新创建任务?任务是否有任何可能导致问题的映射参数?
-
@DaveSexton 嗯,我还没有尝试从头开始逐步重新创建它。不过好主意,我可以试一试。我没有任何映射参数,尽管我确实有几个变量用于 excel 输出的文件复制操作。
-
@DaveSexton 不幸的是,从头开始重新创建工作给了我完全相同的错误。