2010-01-13 66 views
3

我有一个SQL Server集成服务项目,它使用SQL命令作为数据访问模式使用OLE DB源查询SQL Server 2005数据库。SQL Server集成服务 - 向SQL语句添加参数

我想参数化我的SQL查询,但语法不是@PARAM,当我尝试使用?并点击参数我得到一个错误,说“参数不能从SQL命令中提取”。

我做这样的事情

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

回答

1

它看起来像OLEDB连接不会与它需要来确定参数的数据类型等,因此它不能正确解析出一切供应SSIS它应该是什么(这是我的猜想)。由于错误消息提示,您可以使整个SQL命令来自一个变量。您需要一个您在数据流之前设置的字符串变量。

+1

我明白了,这似乎有点让人失望! – AJM 2010-01-13 15:33:02

+0

你知道如果我使用DataReader来源会有更多运气吗? – AJM 2010-01-13 15:34:02

+0

我有同样的想法,并尝试使用DataReader,根本无法使用参数。如果我找到更好的解决方法,我会让你知道。 – 2010-01-13 15:38:08

0

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

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

参数化条件语句:使用sql命令。 Sql命令文本将如下所示:Select * From Table where id =?。然后映射你的变量。

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

我并不完全确定你想要参数化的东西,所以我给了你一些可能的选项,不帮你解决你的问题。我希望这有帮助。

7

在创建动态SQL语句时,我使用表达式获得了更好的运气。所以在这个假设的情况下,我会创建2个变量Qry1和Qry1Param1。

的Qry1变量中我会使用表达式编辑器创造的东西,看起来像

"SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = " + @[User::Qry1Param1] 

Qry1Param1变量会是这样的1

这样Qry1计算结果为

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

然后你可以改变OLEDB数据源从变量中使用SQL命令的数据访问模式和用户:: Qry1输入变量。

0

你是如何设置你的执行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 

This is my ExecSql setting.

在测试了MSSQL2008,SSIS2008。

1

我有这个问题,它让我疯狂,有些查询会工作,而其他人会失败。我的决议是删除SELECT *,而是明确指定列。在其他一些查询中,我必须删除子查询。基本上,你必须摆弄/简化你的查询,直到OLEDB提供者能够充分解析呈现参数信息所需的所有信息。

为什么OLEDB提供程序不能返回更具描述性的错误消息,因此人们不必诉诸包变量解决方法????