代码之家  ›  专栏  ›  技术社区  ›  prime23 hans

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

  •  0
  • prime23 hans  · 技术社区  · 16 年前

    我有一个这样的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 回复  |  直到 16 年前
        1
  •  1
  •   Marc Gravell    16 年前

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

    啊…所以你希望丢失的桌子在你的 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工具
    • 编写不信任特殊数据的数据不重要实用程序
        2
  •  0
  •   Mr. Smith    16 年前

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

    use MyDBName
    go
    
    select * from sys.tables
    go
    

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

        3
  •  0
  •   Gnark    16 年前

    如果不知道你所说的是什么样的数据库,特别是涉及到的实体和关系,你很难猜出来… 如前所述,您通常不会事先检查表是否存在——在我看来,这就像是一个持久性问题……