首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS参数到变量开关

SSIS参数到变量开关
EN

Stack Overflow用户
提问于 2017-03-17 12:19:39
回答 1查看 1.2K关注 0票数 1

我试图通过在SQL Task中使用swicth case SQL语句将SSIS中的执行参数绑定到变量:

代码语言:javascript
复制
SELECT  @[User::StartTime]= 

CASE @[$Project::CmdParam] WHEN 'Full' THEN '20000101000100' WHEN 'Day-1' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -1, GETDATE() ), 112),0,12)+''+'235000') WHEN 'Day-2' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -2, GETDATE() ), 112),0,12)+''+'235000') WHEN 'Day-3' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -3, GETDATE() ), 112),0,12)+''+'235000') ELSE @[$Project::CmdParam]+'235000' END

我能够在SSMS中运行这个查询,但是它在我的包中失败了。它不能解析查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 12:36:10

代码语言:javascript
复制
SELECT  
CASE WHEN @[$Project::CmdParam]='Full'  THEN '20000101000100'
     WHEN @[$Project::CmdParam]='Day-1' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -1, GETDATE() ), 112),0,12)+''+'235000')
     WHEN @[$Project::CmdParam]='Day-2' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -2, GETDATE() ), 112),0,12)+''+'235000')
     WHEN @[$Project::CmdParam]='Day-3' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -3, GETDATE() ), 112),0,12)+''+'235000')
     ELSE @[$Project::CmdParam]+'235000'
 END

确保parameter nameParameter Mapping页面中的匹配与@[$Project::CmdParam]CASE WHEN完全相同,如下所示。更重要的是,选择Single Row作为reulst,选择@[User::StartTime]作为Result页面中的存储变量。

更新

就像尼克说的,切换到ADO.Net作为Connection Type,因为您使用的是Server,那么您可以使用上面的映射方法,否则,您必须使用?,替换查询中的每个@[$Project::CmdParam],然后映射参数的Parameter Name将在您的示例中为0,1,2,3,4,与结果映射保持不变。

第二次更新如果现在使用ADO.net,忘记0-4的事情,将下面的查询粘贴到Execute SQL Task中的语句中

代码语言:javascript
复制
SELECT  
CASE WHEN @a = 'Full'  THEN '20000101000100'
     WHEN @a = 'Day-1' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -1, GETDATE() ), 112),0,12)+''+'235000')
     WHEN @a = 'Day-2' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -2, GETDATE() ), 112),0,12)+''+'235000')
     WHEN @a = 'Day-3' THEN (SELECT SUBSTRING(CONVERT(nvarchar(12),DATEADD("Day", -3, GETDATE() ), 112),0,12)+''+'235000')
     ELSE @a + '235000'
 END

粘贴后,在同一页中选择Single Row作为Result set,然后转到Parameter Mapping页面,选择$Project::CmdParam作为Variable Name,键入@a作为Parameter Name,这将将包变量映射到查询中的@a。然后转到Result Set页面,Add新结果,Result Name应该是0,并选择User::StartTime作为存储查询结果的变量。

在完成以上所有步骤后,这次应该没问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42857394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档