【问题标题】:sql use while loop to fetch values and run query on themsql 使用 while 循环来获取值并对它们运行查询
【发布时间】:2016-04-08 07:52:00
【问题描述】:

我有一个基于两个值参数(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...."

如何按顺序获取这两个或多个值,运行基于 each 的长查询,而不出现此错误?

【问题讨论】:

  • 我认为您应该通过 Code 的长查询加入您的代码表 SELECT code, datime FROM @tbl where ...
  • 最好是更改内部查询以处理一组代码和日期时间,而不是一次处理 1 个。您能否向我们展示一下“长查询”的样子?
  • @Squirrel 谢谢,我会尝试更改长查询来处理一组代码...
  • @Max 你能解释一下吗
  • 你必须解决你当前的脚本。向我们展示你的长查询。总之你的方法是错误的。不需要循环。检查为什么你的长查询返回超过 1 条记录而不使用顶部。跨度>

标签: sql sql-server tsql


【解决方案1】:

我认为你只需要在WHILE 循环下的BEGIN...END 块之间向上移动SET @counter = @counter + 1。这可能是它只适用于 TOP 1 的原因,因为 1 是

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

【讨论】:

  • ...aaand 刚刚意识到这个问题已经超过 2 年了。我怎么到这里了。希望你能明白...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多