Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让SQL Server不返回空查询?_C#_Sql Server - Fatal编程技术网

C# 如何让SQL Server不返回空查询?

C# 如何让SQL Server不返回空查询?,c#,sql-server,C#,Sql Server,我有这样一个sql查询: if table1 exist if table1 has data select * from table1 if table2 exist if table2 has data select * from table2 ... tableN 然后我在c中迭代数据集# 但即使数据库中不存在表,数据集中也有一个空的结果表,如何编写sql以只返回不空的查询?假设我有10个表,其中3个不存在于数据库中,那么,在返回的数据集中只

我有这样一个sql查询:

if table1 exist
    if table1 has data
       select * from table1

if table2 exist
    if table2 has data
       select * from table2
...
tableN
然后我在c中迭代数据集#
但即使数据库中不存在表,数据集中也有一个空的结果表,如何编写sql以只返回不空的查询?假设我有10个表,其中3个不存在于数据库中,那么,在返回的数据集中只有7个结果表?

您可以轻松提取数据库中每个可用表的详细信息:

use MyDBName
go

select * from sys.tables
go

使用游标(尽管我个人尽可能避免使用游标),您可以循环并动态构建查询,以仅使用可用的表,这意味着您不会返回任何空值。

如果不知道您正在谈论的是哪种数据库,尤其是涉及的实体和关系,很难猜测。。。 如前所述,你通常不会事先检查一个表是否存在——这听起来像是一个持久性的问题

我的意思是“返回的数据集中有一个空表,没有列和行”

啊。。。那么您希望缺少的表在
数据集中有存根吗?看起来很漂亮。。。Odd-但我想你可以做如下事情:

if object_id('table2') is not null -- yeuch yeuch yeuch (see below)
begin
    select * from table2
end
else
begin
    select 1 where 1 = 0 
end
我再次强调,我发现这个愿望。。。不寻常的;但是:

  • 如果我们
    选择
    ,即使没有数据,也只会得到一个空表,这很好
  • 如果表不存在,我们只会得到一个1列0行存根
有更好的方法检查对象是否存在,例如,检查info模式表;但我仍然不认为(在一般情况下)过分关注表的存在/不存在是明智的,除非您:

  • 编写工具,如查询分析器或ORM工具
  • 编写一个无法信任临时数据的数据无效实用程序

我对“即使数据库中不存在一个表,数据库中也有一个空表”的含义有点困惑;你是说没有行的桌子吗?或者您正在比较数据库和(例如)结果的
数据集
?通常不需要担心单个表的存在;一般来说,这意味着(对我来说)你的安装脚本失败了。。。特别是,大多数RDBMS无法针对表可能存在或不存在的情况进行优化,因为它们无法缓存缺失表的执行计划。或者您是在谈论表存在但为空的情况?@Marc Gravell抱歉,我的意思是“有一个空表,返回的数据集中没有列和行”