2

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

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

这是我想做的,首先我从一个输出非常小的复杂查询开始。

SELECT * FROM MYTABLE WHERE MYPROPERTY = 1234

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

SELECT 1

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

据我所知,基础数据没有改变(或者即使改变了),我想退后一步,简单地得到结果。但是目前我不知道有什么技巧可以做到这一点,我必须再次运行整个查询。

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

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


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

4

7 回答 7

2

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

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

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

缺点是它会添加到您的查询中。

您还可以将查询结果发送到 SSMS 中的文件,有关格式化输出的信息在这里:SSMS 结果到文件

于 2013-07-23T13:21:32.517 回答
2

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

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

于 2013-07-30T18:22:01.783 回答
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/

于 2013-08-01T14:27:37.333 回答
1

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

关闭 SSMS 窗口后,我不相信有办法取回“缓存”结果。

于 2013-07-23T13:00:47.013 回答
1

这不是您问题的技术答案。多年来,我一直在编写查询并查看结果,我习惯将结果保存在 Excel 中,而不管我使用的是什么数据库/查询工具。

Excel 中的格式相当有条理:

  1. 每个工作表都有日期。(称为“7 月 1 日”。)
  2. 每个电子表格包含一个月。(通常使用月份名称,例如“work-201307”。)
  3. 在“B”列中,我复制并粘贴查询。
  4. 在下方的“C”列中,我复制并粘贴了结果。
  5. 下一个查询在几行之后开始,一个接一个。

我将查询放在“B”列中,因此我可以转到“A”列并使用它来获取第一行。我将结果放在“C”列中,因此我可以转到“B”列并用于在查询之间移动。

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

不过,在您的问题中,我意识到我现在本能地解决了这个问题,因为“右键单击网格,复制列标题,alt-tab 到 excel,alt-V”是我很自然的行为。

于 2013-07-28T15:39:54.203 回答
0

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

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

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

于 2013-07-23T13:12:03.710 回答
0

您是否考虑过使用某种离线 SQL 客户端,例如 Excel?具体来说,Excel 会将结果检索到电子表格中(使用数据功能区/菜单),它们作为结果几乎永久地存储在其中。它会在必要时提示您刷新,或者您可以按需进行。

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

于 2013-07-23T13:42:33.823 回答