【问题标题】:Select all tables without join选择所有没有连接的表
【发布时间】:2017-07-29 08:34:11
【问题描述】:

目标是从所有表中选择所有表并将其存储在数据集中。我有一个似乎有独立(不相关)表的 MS 访问数据库。我在 c# 中的选择查询目前如下所示:

"SELECT * FROM tableA" + "SELECT * FROM tableB" + ... 等等,但我不断收到“FROM 子句错误”消息。

如何在不使用 JOIN 的情况下从数据库中的所有表中进行选择?我可以为每个表创建一个独立的 SELECT 语句并存储在一个独立的数据集中,但必须有更好的方法吗?

我已经看到这是通过存储过程实现的,因为该过程可以是

Create Procedure myProc
as
Begin
    SELECT * FROM tableA

    SELECT * FROM tableB

    SELECT * FROM tableC
END

如何使用 C# 中的查询字符串实现此目的

提前致谢。

【问题讨论】:

  • 查找union all
  • 所有这些表是否具有相同的架构?您尝试获取的列是否具有相同的数据类型,并且您是否从这些表中获取相同数量的列?
  • 这不会返回 1 个结果集吗?我希望能够将所有表存储在数据集中以供以后迭代
  • 只有当您以相同的数据类型获取列并且从每个表中获取的列数应该相同时,您才能使用 Union All。这将在同一数据集中返回结果
  • 表格各不相同。不同的列数,不同的列名等。

标签: c# sql visual-studio


【解决方案1】:

你可以这样做,但这可能不是理想的解决方案。将列数最多的表放在第一个选择中,其余的用 null 替换,同时将所有列转换为相同的数据类型

select 1,'2016-01-05','TestA','1500.00',2500,150
union all 
select 1,'2016-01-05','TestA','1200.00',null,null
union all
select 1,'2016-01-05','TestA','1300.00',null,null

【讨论】:

    【解决方案2】:

    试试这个:

    How to fill Dataset with multiple tables?

    你要查看的代码是:

    SqlDataAdapter adapter = new SqlDataAdapter(
          "SELECT * FROM Customers; SELECT * FROM Orders", connection);
    adapter.TableMappings.Add("Table", "Customer");
    adapter.TableMappings.Add("Table1", "Order");
    
    adapter.Fill(ds);
    

    【讨论】:

    • 顺便说一句,如果数据集将与 .Update() 一起使用,您需要确保 TableMappings 与您加载的表完全绑定。 DataAdapter 无法从 select 中推断出表名,因此 Update() 将无法将更改推送回数据库。
    • 此外,即使 select 语句是两个或多个表的连接,Update() 也可以修改表,前提是您仍然根据要修改的表命名输出表,并且只修改输出表中与您分配的 TableMappings 名称相对应的列。这个功能很不错:)
    • 我以前试过这个。我似乎无法以这种方式进行选择。 OleDbDataAdapter oAdapter = new OleDbDataAdapter("SELECT * FROM tableA;SELECT * FROM tableB", oCon);我得到一个“SQL 语句结束后找到的字符”。
    • 根据提供者的不同,我怀疑 SQL 终止符是问题所在。此外,您提供参数的方式也可能是一个问题。你在连接什么?
    • 这里的另一件事是“;”仅用作分隔符 - 该示例未将其显示为最后一条语句的终止符。是的,我在附加“;”时也遇到了这个问题在单个 like SQL 语句上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2012-08-31
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多