如何在ssis中执行sql任务时使用单个变量作为多参数

时间:2013-12-06 15:17:55

标签: ssis

1)我在包级别创建了一个变量,如@id

2)我想在Execute Sql task中使用此变量 像这样:

select 
  col1,col2 
from table
where col1=@id 
  and col2=@id

3 个答案:

答案 0 :(得分:1)

您可以通过执行SQL任务上的“参数映射”选项卡映射变量。

答案 1 :(得分:1)

只传递一次。在局部变量中接收参数,并在代码中使用该变量。

让我通过一个例子解释一下。希望您只需将一个参数传递一次即可看到我的意思,即使它将在查询/代码中的多个位置使用。

此外,将接收的参数转换为局部变量是有利的。通过这样做,如果我们在查询/代码中修改这些参数的顺序,我们就不必重新配置参数。

CREATE TABLE [dbo].[Test]
(
    [RecID] [int] IDENTITY(1,1) NOT NULL,
    [col1] [int] NOT NULL,
    [col2] [int] NOT NULL,
    [Result] [varchar](50) NOT NULL
) ON [PRIMARY]

- 填充表格

RecID     col1      col2         Result
1         10            10       R1
2         10            11       R2
3         11            11       R3
4         11            11       R4

- 首先在SSMS中测试此代码。请注意,我只声明变量一次。

DECLARE @id AS INT = 11; 

SELECT 
    col1,col2 
FROM
    Test
WHERE
     col1=@id 
     AND col2=@id;

- 现在我们需要做的就是将此代码放在Execute SQL Task Editor中,并传递参数

在一般部分:         结果集:完整结果集         SQLSourceType:直接输入         的SQLStatement:

    DECLARE @id AS INT = ?;

    SELECT 
        col1,col2 
    FROM
        Test
    WHERE
         col1=@id 
         AND col2=@id;

在参数映射部分:

Variable Name: User:id (or whatever you have created in your package)
Direction: Input
Data Type: LONG (for this example)
Parameter Name: 0  
Parameter size: -1

在结果集部分:

Result Name: 0
Variable Name: User::oResultSet (or whatever you have created in your package)

答案 2 :(得分:1)

Execute Sql Task Editor标签的General中,写下您的查询:

select 
  col1,col2 
from table
where col1=?
  and col2=?

然后在Parameter Mapping标签中添加两个参数并填写: 变量名称= [选择您的变量],Direction =“输入”,数据类型= [选择您的数据类型],参数大小= -1

两个条目的区别仅在于参数名称:第一个参数为0,第二个参数为1。