在SQL中获取最后几个查询结果

时间:2013-07-23 12:56:52

标签: sql caching

我经常对SQL数据库进行静态分析,在此期间,除了我之外,没有人可以更改数据。

但是,我还没有找到一种方法来“告诉”这个SQL,以防止多次运行相同的查询。

以下是我想要做的事情,首先我从一个输出非常小的复杂查询开始。

SELECT * FROM MYTABLE WHERE MYPROPERTY = 1234

然后我从同一个窗口运行一个简单的查询(如果相关的话,主要使用SQL server studio)

SELECT 1

现在我突然意识到我忘记保存第一个复杂(慢)查询的结果。

正如我所知,基础数据没有改变(或者即使它确实发生了)我想退一步,只是得到结果。但是目前我不知道这样做的任何技巧,我必须再次运行整个查询。

所以问题摘要是:我如何(自动存储/)从最近执行的查询中获取结果。

我特别感兴趣的是简单的选择查询,并且很乐意为自动结果存储分配100MB内存。更喜欢在SQL Server Studio中使用T-SQL的解决方案,但也欢迎其他SQL解决方案。


编辑:我不是在寻找一种手动防止这种情况发生的方法。在我可以预见到问题的情况下,它不会发生。

7 个答案:

答案 0 :(得分:2)

我经常遇到这种情况,我经常只将长时间运行的查询的结果抛到临时表中:

SELECT * 
INTO #results1
FROM MYTABLE WHERE MYPROPERTY = 1234
SELECT *
FROM #results1

如果查询的运行时间非常长,我可能会使用“真正的”表。这是节省重新运行时间的好方法。

缺点是它会增加您的查询。

您还可以将查询结果发送到SSMS中的文件,格式化输出的信息位于:SSMS Results to File

答案 1 :(得分:2)

这不能在Microsoft SQL Server中完成。 SQL Server不缓存结果,而是缓存查询访问的数据页。这应该会使您的查询第二次更快地运行,因此重新运行它不会那么痛苦。

在其他数据库中,例如Oracle和MySQL,它们确实有一个查询缓存机制,可以让你直接在第二次检索结果。

答案 2 :(得分:1)

最简单的方法是在自己的SSMS窗口中运行每个查询,结果将保留在那里,直到你关闭它,或者内存不足 - 除此之外,我不确定是否有办法完成什么你想要的。

关闭SSMS窗口后,我认为无法找回“缓存”结果。

答案 3 :(得分:1)

这不是您问题的技术答案。经过多年的书面查询和查看结果,我习惯将结果保存在Excel中,无论我使用的数据库/查询工具如何。

Excel中的格式非常有条理:

  1. 每个工作表都有日期。 (称为“7月1日”。)
  2. 每个电子表格包含一个月。 (通常使用月份名称,如“work-201307”。)
  3. 在“B”列中,我复制并粘贴查询。
  4. 在下面的“C”列中,我复制并粘贴结果。
  5. 下一个查询开始后几行,一个接着一个。
  6. 我将查询放在“B”列中,因此我可以转到“A”列并使用它来到第一行。我将结果放在“C”列中,因此我可以转到“B”列并用于在查询之间移动。

    我主要这样做,所以我可以回去看看我几个月前做过的工作。例如,某人从2月份发送了一封电子邮件并说“再次这样做”。我可以回到2月的电子表格,转到它创建的那一天,看看我当时在做什么。

    在你的问题中,我意识到我现在本能地解决了这个问题,因为“右键单击网格,使用列标题进行复制,使用alt-tab进行excel,alt-V”是一种我非常喜欢的行为自然。

答案 4 :(得分:1)

我打算建议你将每个查询运行到一个带有计数器(存储在表中)的脚本中,每次执行查询时增加(即i ++)并将每个查询存储在名为“tmpTable”的临时表中+ i ,但管理起来听起来很复杂。我是对的吗?

然后我用谷歌搜索,我发现了这个工具包:我没试过,但你可以看看:

http://www.ssmstoolspack.com/Features

希望它有所帮助。

编辑:添加了以下链接。可以选择输出XML文件,他们也提到 SQL Server Integration Services 作为可能的解决方案。 http://michaeljswart.com/2012/03/sending-query-results-to-others/#method5

第二次编辑:这也是这个独立于DBMS的工具,听起来很有趣:

http://www.sql-workbench.net/

答案 5 :(得分:0)

我不确定这是你想要的。无论如何检查我的答案

在sql server management studio中,您可以打开多个选项卡来执行查询。为每个查询打开新选项卡,然后在该选项卡下可以使用已执行查询的结果。

在选项卡中执行一个查询后,不要将该选项卡用于新查询,请打开该作业的新选项卡。

答案 6 :(得分:0)

您是否考虑过使用某种脱机SQL客户端,例如Excel?具体来说,Excel会将结果检索到电子表格(使用数据功能区/菜单),这些结果将作为结果存储。它会在必要时提示您刷新,或者您可以按需提供。

关于它是否可以在T / SQL或其他数据库中完成的问题取决于数据库和结果缓存,即使这样,它们也是查询处理器可以使用的选项,而不是单个查询的保证。