【问题标题】:How to both return and store result of select in SQL Server?如何在 SQL Server 中返回和存储 select 的结果?
【发布时间】:2014-02-20 05:55:21
【问题描述】:

我正在 SQL Server 存储过程中进行选择。此选择将结果返回给调用者,这是我需要的,但我还需要在存储过程的其余部分中使用选择中的字段之一。

现在,我正在正常进行选择。然后我创建一个临时表,并再次重新执行相同的选择,但我将结果插入到临时表中。有一个更好的方法吗?

对于上下文,我实际上是从数据库中拉出一棵树。有很多一对多的表,我正在使用从一个级别获得的 id 来拉出下一个级别。

【问题讨论】:

  • 你能告诉我们你尝试了什么,数据库的内容,你的预期输出。
  • 我的输出很好。似乎应该有一种更有效的方法,因为我基本上每次选择都做了两次。例如,有一个“Continents”表、一个“Countries”表和一个“Provinces”表。我需要把亚洲和南美洲的所有国家以及这些国家的所有省份都抽出来。每个大陆和每个国家之间都有一个唯一的 id。每个国家和每个省之间也有一个唯一的 ID。
  • 不确定我是否完全理解(即您是否有固定数量的关卡),但您是否为此研究过 CTE?以下是众多示例之一:stackoverflow.com/questions/2199942/… 这使您可以在一个查询中拼接一个自引用表。它可能会也可能不会更有效。
  • 我确实看到了这个问题,但我的情况有所不同,因为我没有自引用表。相反,我有三个不同的表。第二个表存储类型 A 的实体和类型 B 的实体之间的一对多关系。第三个表存储类型 B 的实体和类型 C 的实体之间的一对多关系。

标签: sql sql-server sql-server-2008 stored-procedures


【解决方案1】:

您从基表中选择了两次数据(一次用于返回给用户,一次用于插入临时表),一次从临时表中选择(使用存储过程中前面的列)。

如果你从基表中选择查询很复杂,你可以做的是从你的基表中只选择一次数据到临时表中,然后使用临时表两次(一次将数据返回给用户,一次使用列)。

这将减少执行时间,因为复杂查询只会执行一次,而其他选择仅限于从临时表中简单选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多