Sql 使用While循环从表中计算值?

Sql 使用While循环从表中计算值?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个下表,我需要循环记录并向变量添加值 Declare @Variable1 INT SET @Variable1=0 Declare @totalval INT SET @totalval=0 While (@Variable1<=20) BEGIN SET @totalval=@totalval+(Select Salary from EmpTable Where EmpID=9) PRINT @totalval SET @Variable1= Variable1+1 END

我有一个下表,我需要循环记录并向变量添加值

Declare @Variable1 INT
SET @Variable1=0

Declare @totalval INT
SET @totalval=0

While (@Variable1<=20)
BEGIN
SET @totalval=@totalval+(Select Salary from EmpTable Where EmpID=9)
PRINT @totalval
SET @Variable1= Variable1+1
END
GO
我无法打印值…我正在使用SQL server 2005


谢谢大家

问题在于这一行:

SET @Variable1= Variable1+1
这不起作用,请将其更改为:

SET @Variable1= @Variable1+1
如果您要离开它,您应该会遇到以下错误:


问题在于这一行:

SET @Variable1= Variable1+1
这不起作用,请将其更改为:

SET @Variable1= @Variable1+1
如果您要离开它,您应该会遇到以下错误:


您可以使用此选项:

;WITH a AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT 0)) num
            , *
    FROM    EmpTable
    WHERE   EmpID = 9

)

SELECT  @totalval = SUM(Salary)
        , @Variable1 = COUNT(*)
FROM    a 
WHERE   num <= 20

这将是执行此类任务的常用方法之一,它比循环更有效。“按选择0排序”上的“行号”为记录提供序号,但不更改排序。

您可以使用此选项:

;WITH a AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT 0)) num
            , *
    FROM    EmpTable
    WHERE   EmpID = 9

)

SELECT  @totalval = SUM(Salary)
        , @Variable1 = COUNT(*)
FROM    a 
WHERE   num <= 20

这将是执行此类任务的常用方法之一,它比循环更有效。按选择0排序的行编号为记录提供序号,但不更改排序。

这也适用于您的要求:


这也符合您的要求:


你为什么要循环,不能使用SUM吗?不,我不能使用SUM..这是一项要求SET语句中似乎有错误。你在while中缺少@for variable1look@Kyle,你能解释一下你为什么有这个要求吗?@praveen,你是对的,看看我的答案。我也遇到了一个错误。你为什么要循环,你不能使用SUM吗?不,我不能使用SUM。这是一个要求SET语句中似乎有一个错误。你在while中缺少@for variable1look@Kyle,你能解释一下你为什么有这个要求吗?@praveen,你是对的,看看我的答案。我也犯了个错误。@Kyle,好的。把它换到我给你的第二行,打印就行了。下一次,请包括你得到的任何错误。问题只是说我不能打印值。这让人们相信打印声明有问题,而事实并非如此。@Kyle,好吧。把它换到我给你的第二行,打印就行了。下一次,请包括你得到的任何错误。问题只是说我不能打印值。这让人们相信打印语句有问题,而实际上并没有。