如果第一个查询未返回任何结果并返回,则运行第二个查询

时间:2017-10-02 19:36:24

标签: sql sql-server

我正在尝试将其保留在最小表查询中,以确保减少数据库使用量。我正在使用Microsoft SQL Server Management Server。

我有一个查询,有时根本不会返回任何内容,具体取决于用户的当前状态。如果第一个查询没有返回任何结果,我希望第二个查询运行。

这是在函数内部,需要返回单行列数据。我将包含已更改名称的查询作为示例。我会在制作临时表后进行自己的优化,因此不会经常访问数据库。我只需要弄清楚如何首先完成这项工作。

-- Query #1
INSERT @tlbReturn (returnInfo1, returnInfo2)
    SELECT TOP(1) returnInfo1, returnInfo2
    FROM table1 AS t1a
    INNER JOIN table1 AS t1b ON t1a.someData1 = t1b.someData1
                             AND t1a.someData2 = t1b.someData2
                             AND t1a.someData3 = t1b.someData3
                             AND t1a.someData4 = t1b.someData4
    INNER JOIN table2 AS t2 ON t2.someData6 = t1b.someData7
                            AND t2.someData8 = t1b.someData9
    WHERE t1a.someData10 = 'value'
      AND t1b.someData11 IN ('value1', 'value2') 
    ORDER BY t1b.someDate DESC;

-- Query #2
INSERT @tlbReturn (returnInfo1, returnInfo2)
    SELECT TOP(1) returnInfo1, returnInfo2
    FROM table1 AS t1a
    INNER JOIN table1 AS t1b ON t1a.someData1 = t1b.someData1
                             AND t1a.someData5 = t1b.someData5
    INNER JOIN table2 AS t2 ON t2.someData6 = t1b.someData7
                            AND t2.someData8 = t1b.someData9
    WHERE t1a.someData10 = 'value'
      AND t1b.someData11 IN ('value1', 'value2') 
    ORDER BY t1b.someDate DESC;

理论上我想要像

这样的东西
IF EXISTS(QUERY1) THEN RETURN
ELSE RETURN QUERY2

2 个答案:

答案 0 :(得分:1)

在第一次查询后检查@@ ROWCOUNT的值。

答案 1 :(得分:1)

先做一个选择,检查@@ ROWCOUNT如果是零就做第二次选择