SQL вставка - 1 большой запрос, или много отдельных запросов - PullRequest
2 голосов
/ 10 ноября 2011

Я использую PHP с подключением odbc к базе данных MSSQL.

В настоящее время у меня имеется около 1900 операторов вставки в одну строку, разделенных точкой с запятой, и выполнение этого в 1 операторе odbc_execute.

Во-первых, это плохой метод?Должен ли я обрабатывать каждый оператор вставки отдельно в цикле for?

Кроме того, так, как я сейчас это делаю, с одним большим оператором, по какой-то причине, вставляется максимум 483 строки без ошибок,Если я копирую оператор, который выполняется, и запускаю его через SQL Studio, все строки вставляются, но каждый раз только максимум 483 строки вставляются.Есть идеи, почему это может быть?

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Одна поездка туда и обратно по сети на одну INSERT будет означать большую задержку.Это будет очень медленно.

Вероятно, существует ограничение на размер буфера всех этих объединенных операторов SQL.

Я думаю, что вы хотите использовать подготовленный оператор и связанные переменные:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms712553(v=vs.85).aspx

Вы все еще можете обработать его в цикле - фактически два.Вам понадобится внутренний цикл для добавления INSERT в пакет, который выполняется как отдельная транзакция, и внешний цикл для обработки всех необходимых пакетов.

0 голосов
/ 10 ноября 2011

Вы можете поместить данные в файл (xml?) На sql-сервере и запросить хранимую процедуру у php, который их обрабатывает.

regards, / t

0 голосов
/ 10 ноября 2011

Пока вы не запускаете отдельную транзакцию для каждой вставки, нет ничего плохого в том, чтобы вставлять по одной за раз.

Для такого вида «пакетной вставки» я обычно запускаю транзакцию для каждых 100 строк или около того.

Я бы не пытался втиснуть их всех сразу. делать это нечего.

...