根据表是否为空,在查询视图中返回数据

时间:2014-01-29 11:20:17

标签: sql sql-server view

我想根据其中一个表是否有数据来查询两个表中的一个。例如,我有两个表,一个叫做Prev,另一个叫做Init_SS。如果Prev表中有数据,则查询应返回Prev表中的所有数据,否则如果Prev表为空,则必须返回Init_SS表中的所有数据。

我在SQL Server Mangement Studio中使用SQL Server,这是我在查询视图中使用的代码:

IF EXISTS (SELECT * FROM Prev) SELECT * FROM Prev ELSE SELECT * FROM Init_SS

当我按下执行sql按钮时,它完全符合我的要求,根据Prev是否为空来返回其中一个表。但是当我尝试保存查询视图时,我收到以下错误消息:

Incorrect syntax near the keyword 'IF'

所以我似乎无法在查询视图中使用'IF'。如何创建查询视图让它按照我的描述进行操作?

我也试过这个:

SELECT * 
FROM (IF EXISTS (SELECT * FROM Prev) SELECT * FROM Prev ELSE SELECT * FROM Init_SS) as tb

2 个答案:

答案 0 :(得分:1)

如果两个表的设计相似,则可以

SELECT * FROM Prev 
UNION ALL
SELECT * FROM Init_SS where not exists (SELECT 1 FROM Prev)

答案 1 :(得分:0)

你可以做这样的事情

SELECT * FROM Prev          --<-- Select all
IF(@@ROWCOUNT = 0)          --<-- If no rows has been returned
BEGIN 
 SELECT * FROM Init_SS       --<-- Select this 
END

除了视图之外,这是不可能的。您可以使用表值函数的存储过程。

视图中只能有一个简单的Select语句。