sql使用while循环来获取值并对它们运行查询

时间:2016-04-08 07:52:01

标签: sql sql-server tsql

我有很长的查询,它基于两个值参数(contcode,datime)运行。 我正在使用while循环从另一个表中按顺序获取这些值,运行查询并将结果插入到最终表中:

    DECLARE @r TABLE (id int IDENTITY (1,1),lnr char (9), pday datetime)
    INSERT INTO @r (lnr, pday)
    SELECT TOP 1 lnr, pday FROM memrepay

    DECLARE @counter int SET @counter = 1
    DECLARE @contcode char (9) 
    DECLARE @datime datetime


    WHILE @counter <= (SELECT COUNT(*) FROM @r)
    BEGIN


              --long query


    END

        SET @counter = @counter + 1 

    END

    SELECT * FROM @finaltable

但是长查询仅在我获取1行时有效:

   SELECT TOP 1 contcode, datime FROM @tbl

如果我不使用TOP 1,我会收到以下错误消息:

  "Subquery returned more than 1 value...."

如何按顺序获取这两个或多个值,根据每个值运行长查询,不会出现此错误?

1 个答案:

答案 0 :(得分:0)

我认为您只需要在SET @counter = @counter + 1循环下的BEGIN...END块之间向上移动WHILE。这可能就是为什么它仅适用于TOP 1的原因,因为1是<= COUNT(*)。

DECLARE @r TABLE (id int IDENTITY (1,1),lnr char (9), pday datetime)
    INSERT INTO @r (lnr, pday)
    SELECT TOP 1 lnr, pday FROM memrepay

    DECLARE @counter int SET @counter = 1
    DECLARE @contcode char (9) 
    DECLARE @datime datetime


    WHILE @counter <= (SELECT COUNT(*) FROM @r)
    BEGIN


              --long query

        SET @counter = @counter + 1 

    END   

    END

    SELECT * FROM @finaltable