1)我在包级别创建了一个变量,如@id
2)我想在Execute Sql task
中使用此变量
像这样:
select
col1,col2
from table
where col1=@id
and col2=@id
答案 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。