代码之家  ›  专栏  ›  技术社区  ›  Sesh

如何优化此SQL查询(从C#)

  •  1
  • Sesh  · 技术社区  · 17 年前

    给定表A、B和C,我对其中每一个表中的一列都感兴趣,如何编写一个查询,以便在我的C代码中将每个表中的一列放入3个不同的数组/列表中?

    我目前正在对数据库运行三个不同的查询,但希望在一个查询中完成相同的查询(以节省对数据库的两次访问)。

    5 回复  |  直到 17 年前
        1
  •  0
  •   John Boker    17 年前

    使用存储过程,您可以从数据库返回多个结果集,并用多个表填充数据集,然后可以访问这些表并填充数组/列表。

        2
  •  0
  •   DarkwingDuck    17 年前

    您可以执行3个不同的SELECT语句,并在1个调用中执行。您将获得3个结果集。如何利用这些结果取决于您使用的数据技术。林克?数据集?数据适配器?数据读取器?如果您可以提供这些信息(甚至可能是示例代码),我可以确切地告诉您如何获得所需的信息。

        3
  •  0
  •   patmortech    17 年前

    select field1, 'TableA' as TableName from tableA
    UNION
    select field2, 'TableB' from tableB
    UNION
    select field3, 'TableC' from tableC
    

    这将为您提供一个包含所有记录的大结果集。然后,您可以使用数据读取器读取结果,跟踪上一条记录的TableName值是什么,并且无论何时更改,都可以开始将列值放入另一个数组中。

        4
  •  0
  •   beach    17 年前

    @如果您不关心重复的值,或者如果您只能获得唯一的值(因为您是通过主键或唯一键进行查询),则patmortech将使用UNION ALL而不是UNION。使用UNION ALL可获得更快的性能。

    SQL中没有“数组”的含义。有表、行和列。结果集返回一组行和列。你能举个例子说明你在找什么吗?(源表和示例数据的DDL将非常有用。)

    正如其他人所说,您可以在一个execute语句中向服务器发送多个查询,并通过ADO.NET返回多个结果集。您可以使用DataReader.NextResult()命令返回下一个结果集。

    有关更多信息,请参见此处: MSDN

    第节: 使用NextResult检索多个结果集

    以下是一些示例代码:

    static void RetrieveMultipleResults(SqlConnection connection)
    {
        using (connection)
        {
            SqlCommand command = new SqlCommand(
              "SELECT CategoryID, CategoryName FROM dbo.Categories;" +
              "SELECT EmployeeID, LastName FROM dbo.Employees",
              connection);
            connection.Open();
    
            SqlDataReader reader = command.ExecuteReader();
    
            while (reader.HasRows)
            {
                Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
                    reader.GetName(1));
    
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
                        reader.GetString(1));
                }
                reader.NextResult();
            }
        }
    }
    
        5
  •  0
  •   dkretz    17 年前

    三次旅行。到目前为止的答案表明,要做你想做的事情,你需要从“新到db编程”前进多远。先掌握最简单的方法。