查询在ssis包中的执行SQL任务中不起作用

查询在ssis包中的执行SQL任务中不起作用,ssis,Ssis,此查询在SQLServer2005的查询窗口中工作正常,但在ssis包中的执行SQL任务中运行时抛出错误 declare @VarExpiredDays int Select @VarExpiredDays= Value1 From dbo.Configuration(nolock) where Type=11 DECLARE @VarENDDateTime datetime,@VarStartDateTime datetime

此查询在SQLServer2005的查询窗口中工作正常,但在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
  

这里有什么问题?

您有多个输出类型。您有两个变量和一个查询。 您只需要在“resultset”属性中选择一个

您是否将这些映射到输出参数

 select  @VarStartDateTime
 select  @VarENDDateTime

您有多个输出类型。您有两个变量和一个查询。 您只需要在“resultset”属性中选择一个

您是否将这些映射到输出参数

 select  @VarStartDateTime
 select  @VarENDDateTime

您的目的是检索start和end的值,并将它们分配到SSIS变量中

正如上面提到的@Diego,这两个选择将带来麻烦。在执行SQL任务时,结果集选项包括无、单行、完整结果集和XML。放弃XML选项是因为我不想处理它,放弃None选项是因为我们想要返回行,我们的选项是单行或全行。我们可以使用Full,但是我们需要返回相同数据类型的值,这样处理就会变得复杂得多

通过消去过程,我们可以使用单行的结果集

查询语句 我通过简单地删除前面提到的两个选项来更正提供的查询。最终选择可以简化为以下内容(无需将其放入派生表中)

下面使用了完整的查询

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变量。正如您在下面的结果窗口中所看到的,我创建了两个包级别变量StartDateText和EndDateText,类型为String,默认值为空字符串。您可以在“局部变量”窗口中看到,它们分配的值对应于所提供的源查询中的
@VarExpiredDays=10

要做到这一点,只需配置执行SQL任务的结果集选项卡。其中最困难的部分是确保在源系统类型和SSIS类型之间有正确的映射。使用OLE DB连接时,结果名称与查询中调用的列无关。这只是一个按顺序位置引用列的问题(基于0的计数)。


最后,我发现最好保持基本类型,比如datetime数据类型,并让接口将其格式化为漂亮的本地化值

您的目的是检索start和end的值,并将它们分配到SSIS变量中

正如上面提到的@Diego,这两个选择将带来麻烦。在执行SQL任务时,结果集选项包括无、单行、完整结果集和XML。放弃XML选项是因为我不想处理它,放弃None选项是因为我们想要返回行,我们的选项是单行或全行。我们可以使用Full,但是我们需要返回相同数据类型的值,这样处理就会变得复杂得多

通过消去过程,我们可以使用单行的结果集

查询语句 我通过简单地删除前面提到的两个选项来更正提供的查询。最终选择可以简化为以下内容(无需将其放入派生表中)

下面使用了完整的查询

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变量。正如您在下面的结果窗口中所看到的,我创建了两个包级别变量StartDateText和EndDateText,类型为String,默认值为空字符串。您可以在“局部变量”窗口中看到,它们分配的值对应于所提供的源查询中的
@VarExpiredDays=10

要做到这一点,只需配置执行SQL任务的结果集选项卡。其中最困难的部分是确保在源系统类型和SSIS类型之间有正确的映射。使用OLE DB连接时,结果名称与查询中调用的列无关。这只是一个按顺序位置引用列的问题(基于0的计数)。


最后,我发现最好保持基本类型,比如datetime数据类型,并让接口将其格式化为漂亮的本地化值

为什么您的问题会被标记为
c#
?如果您发布抛出的错误,您可能会得到更多帮助。此外,在进行比较时,请检查以确保您使用SSI和SSM连接到同一个数据库/数据库服务器。为什么您的问题会标记为
c
?如果您发布抛出的错误,您可能会得到更多帮助。另外,在进行比较时,可以检查以确保您使用SSI和SSM连接到同一个数据库/数据库服务器。