此查询在查询窗口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
这里有什么问题,对此的任何帮助都会很棒
由于 王子
答案 0 :(得分:1)
您的目的是检索开始和结束的值,并将它们分配到SSIS变量中。
正如@Diego上面提到的那样,这两个SELECTS会引起麻烦。使用“执行SQL”任务,结果集选项为“无”,“单行”,“完整结果集”和“XML”。丢弃XML选项因为我不想处理它而没有因为我们想要行,我们的选项是Single或Full。我们可以使用Full,但是我们需要返回相同数据类型的值,然后处理变得更加复杂。
通过消除过程,这导致我们使用单行结果集。
我通过简单地删除前面提到的两个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
对应的值
只需配置执行SQL任务的结果集选项卡即可。最难的部分是确保源系统类型和SSIS类型之间的映射正确。使用OLE DB连接时,结果名称与查询中调用列的内容无关。它只是按顺序位置引用列(基于0的计数)。
最后想到,我发现最好将其保存在基本类型中,比如日期时间数据类型,并让界面将其格式化为漂亮的本地化值。
答案 1 :(得分:0)
你有更多的输出类型。您有两个变量和一个查询。 您只需在“结果集”属性中选择一个
您将这些映射到输出参数吗?
select @VarStartDateTime
select @VarENDDateTime