首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据表是否为空在查询视图中返回数据

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

Stack Overflow用户
提问于 2014-01-29 19:20:17
回答 2查看 50关注 0票数 0

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

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

代码语言:javascript
运行
复制
IF EXISTS (SELECT * FROM Prev) SELECT * FROM Prev ELSE SELECT * FROM Init_SS

当我按下execute sql按钮时,它会执行我想要的操作,根据Prev是否为空返回其中一个表。但是当我尝试保存查询视图时,我得到了以下错误消息:

代码语言:javascript
运行
复制
Incorrect syntax near the keyword 'IF'

因此,我似乎不能在查询视图中使用'IF‘。如何通过让查询视图执行上面描述的操作来创建查询视图?

我还尝试了这个:

代码语言:javascript
运行
复制
SELECT * 
FROM (IF EXISTS (SELECT * FROM Prev) SELECT * FROM Prev ELSE SELECT * FROM Init_SS) as tb
EN

回答 2

Stack Overflow用户

发布于 2014-01-30 16:56:32

如果这两个表具有相似的设计,您可以这样做

代码语言:javascript
运行
复制
SELECT * FROM Prev 
UNION ALL
SELECT * FROM Init_SS where not exists (SELECT 1 FROM Prev)
票数 1
EN

Stack Overflow用户

发布于 2014-01-29 19:43:49

你可以这样做

代码语言:javascript
运行
复制
SELECT * FROM Prev          --<-- Select all
IF(@@ROWCOUNT = 0)          --<-- If no rows has been returned
BEGIN 
 SELECT * FROM Init_SS       --<-- Select this 
END

这在视图中是不可能的。为此,您可以使用表值函数的存储过程。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21429544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档