从sql查询返回默认记录

时间:2012-03-08 11:50:51

标签: sql sql-server sql-server-2008

我有一个sql查询,我针对sql server数据库运行,例如。

SELECT * FROM MyTable WHERE Id = 2

这可能会返回许多记录,也可能不会返回任何记录。如果它没有返回,我想改变我的sql查询以返回默认记录,这是可能的,如果是这样,怎么样?如果返回记录,则不应返回默认记录。我无法更新数据,因此需要更改sql查询。

6 个答案:

答案 0 :(得分:3)

另一种方法(你会得到一个空的初始行集);

SELECT * FROM MyTable WHERE Id = 2
IF (@@ROWCOUNT = 0)
   SELECT ...

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你可以看一下这篇文章。它与您的要求类似 Return a value if no rows are found SQL

我希望它能引导你走上正确的道路。

答案 3 :(得分:1)

如果不存在(SELECT top 1 * FROM mytable WHERE id = 2

select * from mytable where id=  'whatever_the_default_id_is'

其他

select * from mytable where id = 2

答案 4 :(得分:1)

如果必须返回整行数据(而不仅仅是单个列),并且必须创建单个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 */)

答案 5 :(得分:0)

查询需要返回相同数量的字段,因此如果要返回默认值,则不应该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