【问题标题】:Union select statements within the while loop T-SQL在 while 循环 T-SQL 中联合选择语句
【发布时间】:2011-02-25 15:34:46
【问题描述】:

我正在尝试使用游标动态生成结果集。以下是代码

        DECLARE           @ MilestoneName VARCHAR(100),
        @MilestoneSts  VARCHAR(100),
        @ProjectPre    VARCHAR(10),
        @ProjectID     VARCHAR(10),
        @Center        VARCHAR(20),
        @CenterPre     VARCHAR(20),
        @Source        VARCHAR(20),
        @Actual        INT;

SET @MilestoneName = null;
SET @MilestoneSts = null;
SET @ProjectPre = null;
SET @CenterPre  = null;

DECLARE s_cursor CURSOR FOR
SELECT ProjectID, Center, Source, Actual
FROM #MILESTONE


OPEN s_cursor
FETCH NEXT FROM s_cursor INTO @ProjectID, @Center, @Source, @Actual

WHILE @@FETCH_STATUS = 0
BEGIN

  SELECT @@FETCH_STATUS sts, @ProjectID PID, @Center Center, @Source Source, @Actual Actual 
  FETCH NEXT FROM s_cursor INTO @ProjectID, @Center, @Source, @Actual
END

CLOSE s_cursor
DEALLOCATE s_cursor  

但是,使用它我可以生成 79 个单行结果,但我想将所有这些行合并为一个结果.. 任何可能的解决方案都将受到高度赞赏..

【问题讨论】:

  • 不会SELECT ProjectID, Center, Source, Actual FROM #MILESTONE 做你需要的吗? - 即你为什么要逐行处理然后再次将行重新连接在一起?我认为这可能是您实际需求的简化。如果是这样,你能告诉我们这些是什么,以便我们看看是否可以避免光标。
  • 虽然我从@ProjectPre 猜测您正在使用前一行中的值做一些事情。您可以只插入一个 tabgle 变量,然后在最后从中选择。或者您可能想解释一下您在哪些方面做得更好,以便我们提出替代方案。

标签: tsql union cursors


【解决方案1】:

只是检查一下,您为什么要为此使用光标?

这个 sproc 可以被替换为

SELECT ProjectID, Center, Source, Actual
FROM #MILESTONE

但也许我在这里错过了什么?

如果您在代码中遗漏了逻辑,请查看此帖子:Multi-statement Table Valued Function vs Inline Table Valued Function

GJ

【讨论】:

  • 我的主管给了我他的代码的简化版本,并要求我找出一种方法来合并这些结果。他将其他 2 个表中的数据放入#milestones,并希望在结果之前连接字段已发布..
  • 嗯,您的问题的答案是创建一个表变量,您可以在其中一一插入行,然后从该表中返回所有内容,但我认为您问的问题不正确。我不这样做;不要认为你需要一个游标,它是一个数据库,而不是一种普通的编程语言。如果您可以向我们展示这两张表是什么并解释需要做什么,我们可以为您做更多的事情。
  • 完全没有理由为此使用游标。 wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them
  • 我知道游标不是正确的方法。我需要访问该数据。我会尽快发布表格信息和实际要求。非常感谢您的支持..
猜你喜欢
  • 2016-03-30
  • 2010-09-14
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
相关资源
最近更新 更多