【问题标题】:Re-run the query of store the results in a table variable?重新运行将结果存储在表变量中的查询?
【发布时间】:2010-07-12 20:17:54
【问题描述】:

我处于需要多次运行相同查询的情况。我必须查看返回的行是否对应于特定值(查询 1),否则,我必须返回结果集的第一行(查询 2)。在 SQL Server 2008 中,我想知道什么是最好的:运行查询并将结果存储在表变量中或重新运行查询两次(即 SELECT * FROM Bla WHERE Bla.Column IN (...) 和 SELECT TOP 1 *来自布拉)?

这两种解决方案中哪一种更可取和/或更快?

【问题讨论】:

    标签: sql tsql sql-server-2008


    【解决方案1】:

    说实话,没有什么“干净”的,真的

    SELECT * INTO #foo FROM Bla WHERE Bla.Column IN (...)
    IF @@ROWCOUNT = 0 
        SELECT TOP 1 * FROM Bla
    ELSE
        SELECT * FROM #foo
    

    这个sn-p的目的

    • 尽可能少地触摸 Bla
    • 返回一个记录集

    也可以在一个 UNION ALL 中使用 NOT IN 或 EXISTS 来完成,但这意味着对 Bla 的更多接触。

    我不确定这是您的选择 1 还是 2...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 2012-03-13
      相关资源
      最近更新 更多