пытался привязать номер параметра 2101. sql сервер поддерживает максимум 2100 параметров

Я пытаюсь выполнить некоторые миграции через Phinx в MSSQL, когда я выполняю свой запрос, получается следующее сообщение: «Пытался связать номер параметра 2101. Сервер sql поддерживает максимум 2100 параметров»

Я уже 3 дня ищу решение, может кто знает, в чем может быть проблема и как ее исправить? может быть проблема связана с моим файлом миграции php? или что-то о моей конфигурации phinx?

Это часть моего файла миграции:

$rows = 
    [

        [
            'COLUMNA'    => 111,
            'COLUMNB' => 101,
            'COLUMNC' => '-1',
            'COLUMND' => '',
            'COLUMNE' => 'ERROR',
            'COLUMNF' => NULL,
            'COLUMNG' => 1,
            'COLUMNH' =>0,
            'COLUMNI' => 10002,
            'COLUMNJ' => '2017-11-12 00:00:00.000',
            'COLUMNK' => -1,
            'COLUMNM' => -1
        ],
        [   'COLUMNA'    => 112,
            'COLUMNB' => 101,
            'COLUMNC' => '-1',
            'COLUMND' => '',
            'COLUMNE' => 'ERROR',
            'COLUMNF' => NULL,
            'COLUMNG' => 1,
            'COLUMNH' =>0,
            'COLUMNI' => 10002,
            'COLUMNJ' => '2017-11-12 00:00:00.000',
            'COLUMNK' => -1,
            'COLUMNM' => -1
        ],
   ]

$X = $this->table('MYTABLE');
    $X->insert($rows);
    $X->saveData();

Большое спасибо


person popquinto    schedule 20.11.2017    source источник


Ответы (2)


Вы можете легко разбивать свои данные с помощью php. Если вы хотите, вы также можете определить хороший размер фрагмента, проверив размер ваших данных.

$chunk_size = floor(2100 / count($rows[0]));
foreach (array_chunk($rows, $chunk_size) as $data_chunk ) {
  $X->insert($data_chunk)->saveData();
}
person lwohlhart    schedule 02.10.2020

Очевидно, вы пытаетесь связать слишком много параметров, решение состоит в том, чтобы выполнять миграцию партиями, скажем, 1000 строк ~ 12000 параметров в соответствии с вашими данными.

$X = $this->table('MYTABLE');
$data = [];
for ($i = 0; $i < count($rows); i++) 
{
    $data[] = $rows[i];
    if(i % 1000 === 0) 
    {
        $X->insert($data);
        $X->saveData();
        $data = [];
    }
}
person Cibula    schedule 20.11.2017