局部变量未显示所有值

时间:2016-08-26 16:07:31

标签: sql-server tsql

我是编程新手,所以我不知道这个问题是怎么回事。

我正在做的是首先在不同的查询中找到@userid值,然后在我做

之后
select a,b
from tableA
where userid = @userid  
and active=1
and payments=1

然后它执行以显示行数(比方说:10行)

但是当我喜欢下面的内容时,我只得到1行(我想得到所有10行):

  declare @A varchar(10)
  declare @B bigint

  select @A=a,@B=b
  from tableA
  where userid=@userid
  and active=1
  and payments=1

  Select @A,@B

所以,我正在寻求帮助,我该怎么做。我必须像第2步一样,因为我必须运行其他查询,@ A和@B

2 个答案:

答案 0 :(得分:2)

是的,因为那些是标量变量,只能容纳1个项目,在您的情况下,它将保存最后一行的值。您可能想要考虑使用表变量。像

DECLARE @tab1 table(
 A varchar(10),
 B bigint );

然后填写

insert into @tab1(A,B)
  select a, b
  from tableA
  where userid=@userid
  and active=1
  and payments=1

现在从中选择

select * from @tab1;

答案 1 :(得分:0)

您似乎正在尝试使用tableA的所有a和b值执行某些操作。

如果记录数量很少,您可以使用游标,否则使用WHILE循环来读取每条记录。

Declare @a varchar(10)
Declare @b varchar(10)

DECLARE MyCursor CURSOR FOR  
select a, b
from tableA
where userid=@userid
and active=1
and payments=1

    OPEN MyCursor   
    FETCH NEXT FROM MyCursor INTO @a, @b   
WHILE @@FETCH_STATUS = 0   
BEGIN   
       Select @a, @b
       FETCH NEXT FROM MyCursor INTO @a, @b  
END   
CLOSE MyCursor   
DEALLOCATE MyCursor