在尝试调用OLE DB源任务中的proc时,我遇到了一个令人沮丧的问题。我在变量数据访问模式下使用SQL命令,但是我可以看到它没有正确地计算我的变量。
我的变量( ValidateAsExpression设置为True)使用表达式创建类似“EXEC sql‘Param’”的ProcName命令,其中Param的值来自我使用EXEC SQL任务设置的变量的值。下面是表达式:
“EXEC ProcName ” + “‘” + @[User::vDateThreshold] + “‘”
如果我在源代码中使用引用静态值的变量,它可以正常工作,但问题似乎是当我在表达式中使用引用另一个变量的变量时。
还有没有人遇到过这个问题?
我之所以使用这种方法,是因为我在尝试将参数与sql命令数据访问方法一起使用时遇到了类似的问题。
提前感谢
发布于 2019-04-19 01:41:09
从@[User::vDateThreshold
的名称来看,它看起来像是一个SSIS datetime变量。尝试将其设置为显式强制转换的变量,然后使用该变量执行存储过程。确保CAST
函数中有单引号('
),如果这是在SSMS中完成的,您将使用它。在SSIS中连接字符串变量中的datetime变量时,必须将datetime变量转换为文本,这是在下面的示例表达式中使用(DT_STR, length, codepage)
完成的。我不确定你使用的是什么版本,但在SSDT for Visual 2017上测试这个版本对我来说很好。如果你仍然想把SQL放在一个变量中,这将包括在内,然而,如果你更喜欢这样做,@Hadi发布的解决方案是一个很好的选择。
"DECLARE @pDate DATETIME
SET @pDate = CAST('" + (DT_STR, 50, 1252)@[User::vDateThreshold] + "' AS DATETIME)
EXEC ProcName @pDate"
发布于 2019-04-23 08:18:57
感谢您对我的问题的回复。
实际上,我发现问题出在包中任务的排序上。当我在exec SQL任务中使用断点仔细查看分配给相关变量的值时,我可以看到错误的日期被传递给了我的proc。当我在较早的时间点设置vDateThreshold的值时,分配了正确的日期值。
我认为这是一个长时间关注某件事的案例,以至于我错过了显而易见的东西。
https://stackoverflow.com/questions/55739727
复制相似问题