2016-01-13 3 views
0

У меня есть кусок кода, как это:Если существует, используйте его. Если нет, попробуйте его на другой стол

IF EXISTS(SELECT VALUE 
       FROM tableA 
       WHERE nameid = 'thisName') 
BEGIN 
    SELECT distinct VALUE 
    FROM tableA 
    WHERE nameid = 'thisName' 
    ORDER BY value 
END 

ELSE BEGIN  
    SELECT distinct VALUE 
    FROM tableB 
    WHERE nameid = 'thisName' 
    ORDER BY value 
END 

В основном выбрать что-то из tableA, если я не нахожу результат там, попробовать его в tableB.

Есть ли более эффективный способ, как написать это? Поэтому мне не нужно писать выбор из tableA дважды (один раз внутри оператора EXISTS и один раз в качестве фактического выбора).

Я играл с COALESCE, но он допускает только один результат, а не набор.

+1

Если это утверждение является автономным, это столь же эффективным, как он получает. –

ответ

1

Дайте это попробовать

SELECT distinct VALUE 
    FROM tableA 
    WHERE nameid = 'thisName' 
    ORDER BY value 
if(@@ROWCOUNT = 0) 
BEGIN 
    SELECT distinct VALUE 
    FROM tableB 
    WHERE nameid = 'thisName' 
    ORDER BY value 
END 
+0

Проблема с этим заключается в том, что он возвращает два выбора, если первый из них пуст. Поскольку у меня есть это в хранимой процедуре и ожидайте только одного результата, это вызовет проблемы. – Zikato

+0

Добро пожаловать – Paparazzi

+0

Я не хотел быть неблагодарным, автономным было бы хорошо, но это не сработает для моей хранимой процедуры. – Zikato

 Смежные вопросы

  • Нет связанных вопросов^_^