Как разделить DataTable, если столбцы больше 1024? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть Таблица данных, имеющая 3k и более столбцов, поскольку все мы знаем, что SQL Таблицы не поддерживают более 1024 столбцов. У меня будет еще одна таблица для этого.

Мне просто нужно split DataTable, если столбцы больше 1024.

Мне нужен эффективный способ.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Я никогда не видел таблицы базы данных с таким большим количеством столбцов. Я не знаю, сколько строк обычно имеет ваш DataTable. Вы можете транспонировать DataTable или ниже - фрагмент кода, как разбить DataTable. Я использовал идею @jdweng с таблицей копирования со всеми значениями, а затем удалил ненужные столбцы в обратном направлении. Я не могу оценить, является ли это наиболее эффективным способом. Я не тестировал его в 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;
}
0 голосов
/ 17 апреля 2020

Читайте о нормализация , так как обычно для правильно нормализованной базы данных не требуются таблицы с 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
    (...)
...