我试图通过在SQL Task中使用swicth case SQL语句将SSIS中的执行参数绑定到变量:
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中运行这个查询,但是它在我的包中失败了。它不能解析查询。
发布于 2017-03-17 12:36:10
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 name在Parameter 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中的语句中
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作为存储查询结果的变量。
在完成以上所有步骤后,这次应该没问题。
https://stackoverflow.com/questions/42857394
复制相似问题