2013-09-16 39 views
7

我试图设置多个变量来返回具有多列的单个行的SQL查询的结果。 SQL语句的格式如下:SSIS-通过单个SQL任务设置多个变量

SELECT top 1 
    a, 
    b, 
    c = x + y, 
    d 
FROM tablename 
WHERE aSwitch = 1 

所以我希望使用'Execute SQL Query'任务,它将用查询结果设置4个包变量。

例如,如果查询的结果是:

| a |  b | c | d | 
------------------------------------- 
| duck | cow | rabbit | 42 | 

然后执行后的变量的状态将是:

var1 = duck 
var2 = cow 
var3 = rabbit 
var4 = 42 

任何想法?

(使用VS/SQL 2005)

回答

13

在SQL任务,下一般菜单中,的ResultSet属性设置为SingleRow

然后,在ResultSet菜单中,按照select子句的顺序添加变量并将变量映射到别名。对于为例:

SELECT 1 AS One, 2 AS Two 

enter image description here

+0

这也很好。这个方法对我发布好奇的解决方案有什么好处? –

+0

可读性(不要低估可读性:-)) – jazzytomato

+0

哈哈不够公平。我会选择这个作为最佳答案,然后(Y) –

-1

具有四个输出参数创建一个存储过程:

CREATE SP_data(
    @x INT, 
    @a int OUTPUT, 
    @b int OUTPUT, 
    @c int OUTPUT 
    @d int output 
) 
AS 
    SELECT top 1 
    @a = a, 
    @b= b, 
    @c = x + y, 
    @d= @d 
FROM tablename 
WHERE Switch = @x 
在执行SQL查询的参数映射标签创建四个输出参数

的执行proc

EXEXCUT SP_data 1,? OUTPUT,? OUTPUT,? OUTPUT, ? OUTPUT 
+0

请查看我的答案,不需要存储过程 – jazzytomato

0

我通过将结果集映射为基于零的序数集来找到解决方案。例如。在任务属性的“结果集”下:

result name | variable name 
------------------------------- 
    0  |  a 
    1  |  b 
    3  |  c 
    4  |  d 

此方法允许我保持我的SQL语句不变。