重新运行查询将结果存储在表变量中?

时间:2010-07-12 20:17:54

标签: sql tsql sql-server-2008

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

两种解决方案中哪一种更好和/或更快?

1 个答案:

答案 0 :(得分:0)

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

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

此代码段的目的

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

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

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