如何在OLE DB Source中传递参数以调用表值函数,如:
从[dbo]中选择*。[udf_test](?,?)
这样做时,我收到错误:
无法从SQL命令中提取参数。提供程序可能无法帮助解析命令中的参数信息。在这种情况下,使用“SQL命令格式变量”访问模式,其中整个SQL命令存储在变量中。 语法错误,权限冲突或其他非特定错误(Microsoft SQL Native Client)
是否有另一种解决方案而不是“来自变量的SQL命令”?
斯文
答案 0 :(得分:3)
您可以使用来自Variable的SQL Command,它相对简单。您可以使用脚本转换构建SQL语句以传递给Source,以编辑保存SQL的变量。因此,例如,您将设置一个名为strSQL的变量并将值设为
select * from [dbo].[udf_test](?1, ?2)
然后在脚本组件中,使用字符串操作方法将要传递的参数替换为?1和?2。
这是一个更多的工作包,但在我的经验中运作良好。
答案 1 :(得分:0)
这是一个变通方法,但效果很好。我们要做的是创建一个名为SetVar的存储过程,它将获取一个输入参数并将其分配给声明的out参数。
在OLE DB源数据库中创建一个名为SetVar的过程。它将@inputVar分配给@outVar
CREATE PROC SetVarInt
@inputVar INT ,
@outVar INT OUTPUT
AS
BEGIN
SELECT @outVar = @inputVar;
END
在SSIS OLE DB源中使用此SQL:
DECLARE @param1 INT;
EXEC [dbo].[SetVarInt] @inputVar = ?, -- int
@outVar = @param1 OUTPUT -- int
SELECT * FROM [dbo].[GetByKey](@param1)
如果没有任何反应,优化器可能已经优化了任务(检查包执行日志)。在这种情况下,我将以下内容添加到OLE DB源SQL的末尾,并将此输出连接到RowCount任务为虚拟变量。
SELECT 1 Done;