C# 如果列大于1024,如何拆分数据表?

C# 如果列大于1024,如何拆分数据表?,c#,asp.net,c#-4.0,datatable,dataset,C#,Asp.net,C# 4.0,Datatable,Dataset,我的数据表有3k和更多列,因为我们都知道SQL表支持的列不超过1024列。我将为它提供另一个表 如果列大于1024,我只需要拆分DataTable 我需要一个有效的方法 提前感谢。阅读有关规范化的内容,因为通常正确规范化的数据库不需要包含1024+列的表。如果没有帮助,你的问题可以通过以下方式解决: 1) 计算列数 SELECT count(*) FROM information_schema.columns c JOIN information_schema.table

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

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

我需要一个有效的方法

提前感谢。

阅读有关规范化的内容,因为通常正确规范化的数据库不需要包含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
    (...)

我从未见过数据库表有如此多的列。 我不知道,您的数据表通常有多少行。下面是一段如何拆分数据表的代码片段。我使用@jdweng idea复制带有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;
}
静态列表拆分表(DataTable largeTable)
{
var tables=新列表();
int chunkSize=1024;
int cycles=largeTable.Columns.Count/chunkSize;
对于(int i=0;i=0;j--)
{
如果(!(j>=i*chunkSize&&j<(i+1)*chunkSize))
{
可诱惑的。柱。移除(j);
}
}
表。添加(诱惑);
}
返回表;
}

复制并删除列>1024。这是一个可怕的表。超过3k列。@jdweng:谢谢,我会试试的this@RyanWilson:此数据表是通过解析最终用户共享的excel创建的。此数据表是通过解析最终用户共享的excel创建的