查询在ssis包中执行sql任务时工作不正常

时间:2012-02-06 07:03:01

标签: ssis

此查询在查询窗口sql server 2005中运行正常,但在ssis包中执行sql任务中运行时抛出错误

declare @VarExpiredDays int
Select  @VarExpiredDays= Value1 From dbo.Configuration(nolock) where  Type=11                      
  DECLARE  @VarENDDateTime datetime,@VarStartDateTime datetime                
  SET @VarStartDateTime= GETDATE()- @VarExpiredDays            
  SET @VarENDDateTime=GETDATE(); 

  select  @VarStartDateTime
  select  @VarENDDateTime

   SELECT * FROM
(SELECT CONVERT(Varchar(11),@VarStartDateTime,106) AS VarStartDateTime) A,
(SELECT CONVERT(Varchar(11),@VarENDDateTime,106) AS VarENDDateTime) B

这里有什么问题,对此的任何帮助都会很棒

由于 王子

2 个答案:

答案 0 :(得分:1)

您的目的是检索开始和结束的值,并将它们分配到SSIS变量中。

正如@Diego上面提到的那样,这两个SELECTS会引起麻烦。使用“执行SQL”任务,结果集选项为“无”,“单行”,“完整结果集”和“XML”。丢弃XML选项因为我不想处理它而没有因为我们想要行,我们的选项是Single或Full。我们可以使用Full,但是我们需要返回相同数据类型的值,然后处理变得更加复杂。

通过消除过程,这导致我们使用单行结果集。

enter image description here

查询又称SQLStatement

我通过简单地删除前面提到的两个SELECTS来更正提供的查询。最终选择可以简化为以下(不需要将它们放入派生表)

SELECT 
    CONVERT(Varchar(11),@VarStartDateTime,106) AS VarStartDateTime
,   CONVERT(Varchar(11),@VarENDDateTime,106) AS VarENDDateTime

以下使用完整查询

declare @VarExpiredDays int
-- I HARDCODED THIS
Select  @VarExpiredDays= 10                 
  DECLARE  @VarENDDateTime datetime,@VarStartDateTime datetime                
  SET @VarStartDateTime= GETDATE()- @VarExpiredDays            
  SET @VarENDDateTime=GETDATE(); 

/*
  select  @VarStartDateTime
  select  @VarENDDateTime
*/
   SELECT * FROM
(SELECT CONVERT(Varchar(11),@VarStartDateTime,106) AS VarStartDateTime) A,
(SELECT CONVERT(Varchar(11),@VarENDDateTime,106) AS VarENDDateTime) B

验证执行SQL任务是否按预期运行。在这一点上,它只是将输出连接到SSIS变量。正如您在下面的结果窗口中看到的,我创建了两个类型为String的包级别变量StartDateText和EndDateText,其默认值为空字符串。您可以在“本地”窗口中看到,它们在提供的源查询中分配了与@VarExpiredDays = 10对应的值

variables, locals and results

只需配置执行SQL任务的结果集选项卡即可。最难的部分是确保源系统类型和SSIS类型之间的映射正确。使用OLE DB连接时,结果名称与查询中调用列的内容无关。它只是按顺序位置引用列(基于0的计数)。 enter image description here

最后想到,我发现最好将其保存在基本类型中,比如日期时间数据类型,并让界面将其格式化为漂亮的本地化值。

答案 1 :(得分:0)

你有更多的输出类型。您有两个变量和一个查询。 您只需在“结果集”属性中选择一个

您将这些映射到输出参数吗?

 select  @VarStartDateTime
 select  @VarENDDateTime