【问题标题】:While Loop Result in On Window窗口中的 While 循环结果
【发布时间】:2018-08-13 21:50:23
【问题描述】:

当我执行这个存储过程时,它会返回 5 个窗口,但我想在一个窗口中获取它而不将其转换为字符串查询。

我只是发布了简化版的查询。我在这里有不同的变量和逻辑,每次都会改变。所以通过循环我管理这个并将结果查询加载到 C# 中的数据集中,当前我在代码中获得多个数据集并合并这些数据表。偶数循环不限于5次,每次都会根据用户在网页视图上的选择而有所不同。我只想在单个表中获取 While 循环结果,而不将其转换为字符串查询。如果您有任何解决方案,请指导我。

DECLARE @intFlag INT, @str VARCHAR(MAX)

SET @intFlag = 1

WHILE (@intFlag <= 5)

BEGIN

    SET @intFlag = @intFlag + 1

--Complex logical queries here that change every time according to 

    SELECT * FROM userHistories
END

GO

要求.

【问题讨论】:

  • 在循环中插入表变量,然后在循环外的该表上选择一次
  • SQL 您必须使用 OrderBy 才能每次都获得相同的结果。 SQL 使用异步并行搜索来查询数据库,并且您不会每次都以相同的顺序获得相同的结果。所以 OrderBy Date 以递减顺序,然后取 5 前 5 个结果。

标签: c# .net sql-server c#-4.0


【解决方案1】:

如果所有结果列都相同,则只能将其放入一个输出中。如果您每次从不同的逻辑中得到不同的结果,那么您需要更改这些结果(通过将缺少的列添加为默认值或 null),以便所有结果都相同。每当您向任何查询添加新列时,它都必须在所有查询中匹配。

那么你有两个选择。如果您有一个预设的、不变的数字或要运行的查询,您可以执行类似的操作

Select query 1
UNION ALL Select query 2
UNION ALL Select query 3

这将返回一个结果集,但它可能对您想要的来说太简单了。另一种选择是创建一个临时表或表变量,然后更改您运行的每个查询以将其数据插入该表。最后选择整个表,最后将数据返回给您。它看起来像这样(使用表变量)

Declare @Results TABLE (field1 int, field2 string ....)

While ... BEGIN
    SET @intFlag = @intFlag + 1
    INSERT INTO @Results (field1, field2, ....)
    Select field1, field2 .... FROM ....

End
--Now return all the data
Select * from @Results

【讨论】:

    【解决方案2】:

    根据提供的信息,我将使用一个临时表来存储在 while 循环中生成的每个查询的结果。您甚至可以使用临时表中的递增值,以便您可以更轻松地识别结果来自哪个查询。您确实没有提供足够的细节来说明 while 循环中的可能性,所以我假设数据至少具有相同数量的列和/或数据类型。

    其他信息可能会提供更好的答案,但这是我会根据您描述的需求所做的。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2018-06-29
      • 2014-06-20
      • 2019-12-19
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多