вернуть запись по умолчанию из запроса SQL - PullRequest
7 голосов
/ 08 марта 2012

У меня есть SQL-запрос, который я запускаю к ​​базе данных SQL-сервера, например.

SELECT * FROM MyTable WHERE Id = 2

Это может вернуть несколько записей или не вернуть ни одной. Если он не возвращает ничего, я хотел бы изменить свой sql-запрос, чтобы он возвращал запись по умолчанию, возможно ли это, и если да, то как? Если записи возвращаются, запись по умолчанию не должна возвращаться. Я не могу обновить данные, поэтому для этого нужно изменить SQL-запрос.

Ответы [ 6 ]

3 голосов
/ 08 марта 2012

Другой способ (вы получите пустой исходный набор строк);

SELECT * FROM MyTable WHERE Id = 2
IF (@@ROWCOUNT = 0)
   SELECT ...
1 голос
/ 14 августа 2014

Если вам нужно вернуть целые строки данных (а не только один столбец) и вам нужно создать один SQL-запрос, то сделайте следующее:

Соединение левой таблицы с фактической таблицей по умолчанию для таблицы из одной строки

select
    coalesce(a.col1, d.col1) as col1,
    coalesce(a.col2, d.col2) as col2,
    ...
from (
    -- your defaults record
    select
        default1 as col1,
        default2 as col2,
        ...) as d
    left join actual as a
    on ((1 = 1) /* or any actual table "where" conditions */)
1 голос
/ 08 марта 2012

если не существует (SELECT top 1 * FROM mytable WHERE id = 2)

select * from mytable where id=  'whatever_the_default_id_is'

else

select * from mytable where id = 2
1 голос
/ 08 марта 2012

Вы можете посмотреть этот пост. Это похоже на то, что вы спрашиваете Возвращает значение, если строки не найдены. SQL

Я надеюсь, что это поможет вам выбрать правильный путь.

1 голос
/ 08 марта 2012
SELECT TOP 1 * FROM (
SELECT ID,1 as Flag FROM MyTable WHERE Id = 2
UNION ALL
SELECT 1,2
) qry
ORDER BY qry.Flag ASC
0 голосов
/ 08 марта 2012

Запрос должен возвращать одинаковое количество полей, поэтому вам не нужно делать SELECT * FROM, а SELECT value FROM, если вы хотите вернуть значение по умолчанию.

Имея это в виду

SELECT value FROM MyTable WHERE Id = 2
UNION
SELECT CASE (SELECT count(*) FROM MyTable WHERE Id = 2) 
   WHEN 0 THEN 'defaultvalue' 
   END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...