【问题标题】:How to split DataTable if columns are greater than 1024?如果列大于 1024,如何拆分 DataTable?
【发布时间】:2020-07-31 03:44:57
【问题描述】:

我的数据表有 3k 或更多列,因为我们都知道 SQL 表不支持超过 1024 列。我将为此准备另一个表。

如果列大于 1024,我只需要拆分 DataTable。

我需要一个有效的方法。

提前致谢。

【问题讨论】:

  • 复制然后删除列 > 1024.
  • 那是一张可怕的桌子。超过 3k 列。
  • @jdweng:谢谢,会试试这个
  • @RyanWilson : 此数据表是通过解析最终用户共享的 excel 创建的

标签: c# asp.net c#-4.0 datatable dataset


【解决方案1】:

我从未见过有这么多列的数据库表。 我不知道,您的 DataTable 通常有多少行。您可以transpose DataTable 或以下代码 sn-p 如何拆分 DataTable。我将@jdweng 的想法与带有 al 值的复制表一起使用,然后向后删除不需要的列。我无法评估这是否是最有效的方法。我没有在带有行的 DataTable 上对其进行测试。

static List<DataTable> SplitTables(DataTable largeTable)
{
    var tables = new List<DataTable>();
    int chunkSize = 1024;
    int cycles = largeTable.Columns.Count / chunkSize;

    for (int i = 0; i <= cycles; i++)
    {
        var tempTable = largeTable.Copy();
        for (int j = largeTable.Columns.Count - 1; j >= 0; j--)
        {
            if (!(j >= i * chunkSize && j < (i + 1) * chunkSize))
            {
                tempTable.Columns.RemoveAt(j);
            }
        }
        tables.Add(tempTable);
    }
    return tables;
}

【讨论】:

    【解决方案2】:

    了解规范化,因为通常正确规范化的数据库不需要具有 1024 列以上的表。如果没有帮助,您的问题可以通过例如解决

    1) 计算列数

    SELECT count(*)
        FROM information_schema.columns c
            JOIN information_schema.tables t ON c.TABLE_NAME = t.TABLE_NAME
            AND c.table_schema = t.table_schema
        WHERE table_type = 'base table'  
            and c.table_name ='table_name_here'
    

    2) 如果超出预期 - 创建一个新表

    CREATE TABLE new_table_name_here
        (...)
    

    【讨论】:

    • 此数据表是通过excel解析生成的,最终用户共享
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2020-06-27
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2011-12-29
    相关资源
    最近更新 更多