Sql server SQL Server集成服务-向SQL语句添加参数

Sql server SQL Server集成服务-向SQL语句添加参数,sql-server,ssis,Sql Server,Ssis,我有一个SQLServerIntegrationServices项目,它使用OLEDB源以SQL命令作为数据访问模式查询SQLServer2005数据库 我试图参数化我的SQL查询,但语法不是@PARAM,当我尝试使用时?然后单击参数,我会得到一个错误,提示“无法从SQL命令中提取参数。” 我在做类似的事情 SELECT * FROM [dbo].[TabledValuedFunction] (?) 看起来OLEDB连接没有为SSI提供确定参数数据类型等所需的一切。因此,它无法正确解析它应该是

我有一个SQLServerIntegrationServices项目,它使用OLEDB源以SQL命令作为数据访问模式查询SQLServer2005数据库

我试图参数化我的SQL查询,但语法不是@PARAM,当我尝试使用时?然后单击参数,我会得到一个错误,提示“无法从SQL命令中提取参数。”

我在做类似的事情

SELECT * FROM [dbo].[TabledValuedFunction] (?)

看起来OLEDB连接没有为SSI提供确定参数数据类型等所需的一切。因此,它无法正确解析它应该是什么(这是我的猜测)。但是,正如错误消息所示,您可以使整个SQL命令来自一个变量。您需要在数据流之前设置一个字符串变量。

您可以使用ole db源中的变量参数来提供动态表、动态条件语句或动态sql语句。通过单击ole db源,可以更改数据访问模式。下面是一些不同类型的访问模式的示例,您可以在这些模式中使用包变量:

参数化表格-使用表格名称或视图名称变量。然后选择包含有效表名的变量名

参数化条件语句:使用sql命令。Sql命令文本类似于:从id=?。然后映射变量

变量中的动态sql:使用变量中的sql命令。然后,您可以将sql语句放在一个包字符串变量中:Select*From Table


我不完全确定你想参数化什么,所以我给了你一些可能的选项,这些选项可能/可能对你的具体问题没有帮助。我希望这能有所帮助。

在创建动态SQL语句时,我使用表达式的运气要好得多。在这个假设的例子中,我将创建两个变量Qry1和Qry1Param1

在Qry1变量内部,我将使用表达式编辑器创建如下内容

"SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = " +   @[User::Qry1Param1]
qryparam1变量类似于
1

因此,Qry1的计算结果为

SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = 1

然后,您可以将OLEDB数据源更改为使用变量中SQL命令的数据访问模式,并输入User::Qry1变量。

您是如何设置执行SQL任务组件的? 我刚试过,效果很好

这是我使用的函数:

create function test1(@x int) 
returns @tbl table (x int)
as begin 
 while ( @x > 0 )
 begin
  insert @tbl values(@x);
  set @x-=1;
 end;

 return;
end;
go


在MSSQL2008、SSI2008上测试。

我遇到了这个问题,它让我抓狂,一些查询可以工作,而另一些则会失败。我的解决方案是删除SELECT*并显式指定列。在其他一些查询中,我必须删除子查询。基本上,您必须处理/简化查询,直到OLEDB提供程序能够充分解析呈现参数信息所需的所有信息


为什么OLEDB提供程序不能返回更具描述性的错误消息,这样人们就不必求助于包变量解决方法???

您知道我使用DataReader源是否会更幸运吗?我也有同样的想法,尝试使用DataReader,但根本无法使用参数。如果我能找到更好的工作,我会告诉你的。