像foreach循环一样重复select语句

时间:2013-05-21 20:33:31

标签: sql-server-2008 loops select

有没有办法让SELECT语句重复出现?
接受这个问题:

DECLARE @one INT = 1
SELECT @one + @one AS [MATH]

输出为

 ------
| MATH |
 ------
|  2   |
 ------

我要做的是为每个不同的数字重复这个SELECT语句,比如

 -- PSEUDO CODE

 DECLARE @Numbers NVARCHAR(MAX) = '1,2,3,4'
 FOR EACH INT @number IN @Numbers 
 BEGIN 

   SELECT @number + @number AS [MATH]

 END

输出结果为:

 ------     
| MATH | 
 ------
|  2   |
 ------  
 ------     
| MATH | 
 ------
|  4   |
 ------  
 ------     
| MATH | 
 ------
|  6   |
 ------ 
 ------
| MATH | 
 ------
|  8   |
 ------

我知道他们当时不是INT,但我有一个函数可以拆分','然后将varchar转换为数字。

我不知道如何把它放在WHILE循环中,因为我找不到合适的条件。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

是的,Common Table Expressions可以递归。

以下是一个示例:http://blog.sqlauthority.com/2008/07/28/sql-server-simple-example-of-recursive-cte/

或者您可以使用while循环,弹出字符串中的数字。

 declare @sum = 0
 while len(@string) > 0
 begin
      select @sum + convert(int, substring(1,charindex(',',@string),@string)))
      select 'Math: '+ltrim(str(@sum))
      select @string = substring(charindex(',',@string),len(@string),@string)
 end

答案 1 :(得分:2)

试试这个:

DECLARE @Numbers NVARCHAR(MAX) = '1,2,3,4'
DECLARE @num int=0
WHILE CHARINDEX(',',@Numbers) > 0
BEGIN 
SET @num=convert(int,LEFT(@Numbers,1))
SET @Numbers=STUFF(REPLACE(@Numbers,LEFT(@Numbers,1),''),1,1,'')
SELECT @num + @num AS [MATH]
END
select convert(int,@Numbers)+convert(int,@Numbers)