如果列大于1024,如何拆分DataTable?

How to split DataTable if columns are greater than 1024?

我有数据 table 有 3k 和更多的列,我们都知道 SQL 表不支持超过 1024 列。我将有另一个 table它.

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

我需要一个高效的方法。

提前致谢。

阅读有关 规范化 的信息,因为通常正确规范化的数据库不需要 table 具有 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) 如果超出预期 - 创建一个新的 table

CREATE TABLE new_table_name_here
    (...)

我从未见过包含如此多列的数据库 table。 我不知道,您的 DataTable 通常有多少行。您可以 transpose DataTable 或以下是如何拆分 DataTable 的代码片段。我将@jdweng 的想法与 copy table 和 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;
}