迭代联合SQL查询

时间:2018-12-06 19:59:45

标签: sql sql-server

我正在与CA(Broadcom)UIM合作。我想要从几个视图中提取不同值的最有效方法。对于S_QOS_DATA表中存在的每个QOS,我都有以“ V_”开头的视图。我特别想为以“ V_QOS_XENDESKTOP”开头的任何视图提取数据。

给我快速结果的低效率方法如下:

  1. grid-template-rows
  2. 获取该数据并将其放入Excel。
  3. 使用select * from s_qos_data where qos like 'QOS_XENDESKTOP%';仅将qos名称转换为查询,例如:

    CONCAT

  4. 向下复制所有行的公式单元格,并从最后一个查询中删除“联合” 作为添加分号。

这很有效,我得到了输出,但是必须有一个更优雅的解决方案。我发现的大多数答案都涉及通过SQL进行迭代,但使用的数字似乎不太符合我的期望。示例:Multiple select queries using while loop in a single table? Is it Possible?Syntax of for-loop in SQL Server

1 个答案:

答案 0 :(得分:0)

做您想做的最有效的方法是做类似CA脚本(链接到的脚本)的事情。也就是说,使用动态SQL:从系统表中创建一个包含所需SQL的字符串,然后执行它。

一种更有效的方法是根据基础表编写不同的查询,从而模仿您关心的视图中的条件。

但是,除非您的视图定义经常更改,否则我建议不要使用动态SQL。 (我怀疑它们是否经常更改。重新生成视图的频率不会比获得新脚本的频率高,对吗?CA不会轻易添加表。)AFAICT,基本上,这就是您正在做的事情。

为自己获取视图名称的列表,并针对它们的并集显式编写查询。已完成的工作:易于理解,无需进行大量修改,就可以为服务器提供最佳的优化机会。

我可以想象无法将所有工作放到您自己的视图中并在您方便时对其进行查询是令人沮丧和容易出错的。遗憾的是,大多数组织不允许用户编写自己的视图和过程(由自己的帐户拥有,而不是dbo)。我能提供的最好的方法是将视图主体保存到文件中,然后将其插入查询中的WITH子句中

WITH (... query ...) as V select ... from V