如何让SQL Server不返回null查询?

时间:2009-08-31 07:00:48

标签: 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个数据库中不存在,那么,返回的数据集中只有7个结果表吗?

3 个答案:

答案 0 :(得分:1)

  

我的意思是“在返回的数据集中有一个没有cols和row的空表”

啊......所以你希望丢失的表在DataSet中有一个存根?看起来很漂亮......很奇怪 - 但我猜你可以这样做:

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

同样,我强调我发现这种欲望......不寻常;但是:

  • 如果我们select即使没有数据,我们只需要一张空表,这很好
  • 如果表不存在,我们只得到一个1列,0行存根

有更好的方法来检查对象是否存在 - 例如,检查信息模式表;但是我仍然不相信它(在一般情况下)明智的过分关注表的存在/不存在,除非你是:

  • 编写工具,例如查询分析器或ORM工具
  • 编写无法信任ad-hoc数据的数据不实用实用程序

答案 1 :(得分:0)

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

use MyDBName
go

select * from sys.tables
go

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

答案 2 :(得分:0)

如果不知道什么样的数据库 - 特别是涉及的实体和关系 - 你正在谈论的话,很难猜到...... 如前所述,你通常不会事先检查一张桌子是否存在 - 听起来像是一个坚持不拔的问题......