Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите, как можно в MS SQL сделать множественное добавление записей - в MySQL было так: Код: sql 1. 2. 3. 4. 5. 6. В MS SQL на такой запрос стоит ограничение в 1000 записей. Данные( строки ) передаются методом POST из textarea, Framework Yii2. Как я понял BULK INSERT позволяет делать добавление данных только из файла. Как можно решить данную проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 09:52 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Разбивать по одной тыще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 09:55 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Сделать хранимую таблицу с табличным параметром (и табличный параметр тоже сделать), и все строки для вставки передавать в качестве параметра при вызове процедуры. Ну дальше Код: sql 1. https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 10:17 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 10:29 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, А что такое BULK INSERT вы смотрели? Он вам не подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 11:21 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, BULK INSERT можно делать ещё из памяти. На .NET https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy?view=netframework-4.8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 11:22 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
L_argo Разбивать по одной тыще. Как ни странно, но почему-то мне этот вариант сразу в голову не пришел. А ведь в моем случае он наверное один из самых простых. Практически не придется код переписывать, но есть и минус - будет несколько запросов к БД - чего не очень хотелось бы. Андрей Юниор Сделать хранимую таблицу с табличным параметром (и табличный параметр тоже сделать), и все строки для вставки передавать в качестве параметра при вызове процедуры. Ну дальше Код: sql 1. https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters Если честно, боюсь в данный момент для меня это может быть трудным в реализации. Так как с MS SQL скажем так мало знаком пока. Да и не совсем понимаю как из Yii будут подобные обращения идти... invm _BBC_, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Если я правильно понимаю тут уже не будет ограничения на 1000 записей, если так, то наверное это самый удобный вариант для меня, останется только понять как сделать такой запрос из Yii. Так как сейчас запрос выполняется следующим образом: Код: php 1. И framework автоматически генерирует на основе этого запрос такого же вида, как в первом посте. Нужно будет как-то переписать это... Но тем не менее думаю, что это мой вариант. a_voronin _BBC_, А что такое BULK INSERT вы смотрели? Он вам не подойдет? Если бы был пример на php(Yii) - как из массива занести данные в БД через BULK INSERT, то может и подошел бы, а так видимо не мой вариант. Спасибо всем за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 11:37 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_ Если честно, боюсь в данный момент для меня это может быть трудным в реализации. Так как с MS SQL скажем так мало знаком пока. Да и не совсем понимаю как из Yii будут подобные обращения идти... На самом деле ничего сложного. На стороне MS SQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Остаётся только вызвать хранимую процедуру с параметром типа SomeTVP - в принципе, это самое сложное, но это вопрос чисто php(Yii). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 11:55 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
invm _BBC_, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Поэтому чем этот вариант отличается от исходного? Вот UNION ALL такого ограничения не имеет (может, оно и есть, но существенно больше 1000). Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 12:26 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
iap Если не ошибаюсь, указанное ограничение действует на конструктор значений VALUES (...),(...) При использовании в виде предложения VALUES инструкции INSERT... VALUES применяется ограничение в размере 1000 строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 12:29 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
invm iap Если не ошибаюсь, указанное ограничение действует на конструктор значений VALUES (...),(...) При использовании в виде предложения VALUES инструкции INSERT... VALUES применяется ограничение в размере 1000 строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 12:38 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Андрей Юниор _BBC_ Если честно, боюсь в данный момент для меня это может быть трудным в реализации. Так как с MS SQL скажем так мало знаком пока. Да и не совсем понимаю как из Yii будут подобные обращения идти... На самом деле ничего сложного. На стороне MS SQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Остаётся только вызвать хранимую процедуру с параметром типа SomeTVP - в принципе, это самое сложное, но это вопрос чисто php(Yii). Спасибо за пояснение. В принципе даже понял примерно как это делать, но пока остановился на варианте: Код: php 1. 2. 3. 4. 5. 6. 7. 8. Записи добавляет, на количество не ругается. Но теперь появилась новая проблема: SQLSTATE[IMSSP]: Tried to bind parameter number 2101. SQL Server supports a maximum of 2100 parameters. Это запрос вида: Код: sql 1. Как здесь можно обойти ограничение в 2100 параметров или как правильно формировать подобный запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 14:08 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, на пачки разбивайте как ещё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 14:24 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Как здесь можно обойти ограничение в 2100 параметров или как правильно формировать подобный запрос? Кинуть их в отдельную (временную?) табличку и потом доставать оттуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 14:36 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
L_argo Как здесь можно обойти ограничение в 2100 параметров или как правильно формировать подобный запрос? Сделал вот так: Код: sql 1. Ну оно как бы работает.... то есть ошибок нет и результат верный.... НО - ВРЕМЯ ВЫПОЛНЕНИЯ ЗАПРОСА - просто космическое - около 20 секунд.... не тот результат, который хотелось бы видеть.... в MySQL с этой же БД подобный запрос типа Код: sql 1. выполняется за доли секунды и с проверкой 3к параметров в IN и с проверкой 10к параметров в IN... хотелось бы такой же результат получить и с MS SQL.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 14:51 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Чем только люди не занимаются, чтобы только не закидывать данные на сервер балк-инсертом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:12 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, это не эффективно, надо выгружать в файл и загружать на сервер любым штатным ETL средством - Bulk Insert, SSIS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:23 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич Чем только люди не занимаются, чтобы только не закидывать данные на сервер балк-инсертом. Владислав Колосов это не эффективно, надо выгружать в файл и загружать на сервер любым штатным ETL средством - Bulk Insert, SSIS. Почему не ХП + TVP? SSIS для каких-то 3-10 тыс. строк - это сильно излишне. Зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:25 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич Чем только люди не занимаются, чтобы только не закидывать данные на сервер балк-инсертом. С INSERT конечно тоже хотелось бы узнать как из массива PHP занести данные в таблицу с помощью BULK INSERT - может подскажите? Хотя в той вариации как я сейчас сделал оно работает и добавляет достаточно быстро - несколько миллисекунд. А вот SELECT ... WHERE IN с множеством параметров - не понимаю как сделать.... точнее сделал как написал постом выше, но это оОчень долго выполняется. Тут идей нет(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:26 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Андрей Юниор, Как Вы узнали, что у ТС всего 10000 строк? Я думаю, что он бы не волновался из-за такого количества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:29 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Андрей Юниор Гавриленко Сергей Алексеевич Чем только люди не занимаются, чтобы только не закидывать данные на сервер балк-инсертом. Владислав Колосов это не эффективно, надо выгружать в файл и загружать на сервер любым штатным ETL средством - Bulk Insert, SSIS. Почему не ХП + TVP? SSIS для каких-то 3-10 тыс. строк - это сильно излишне. Зачем? Владислав Колосов Андрей Юниор, Как Вы узнали, что у ТС всего 10000 строк? Я думаю, что он бы не волновался из-за такого количества. Строк примерно 100 тысяч изначально. В перспективе за небольшой промежуток времени дойдет до 1-2 млн, на этом уже остановится - то есть далее изменения будут незначительные. Собственно на MySQL есть работающий вариант, все прекрасно работает. Но в силу обстоятельств( не моего желания ) - нужно эту БД перенести на MS SQL - собственно сам перенос я сделал, таблицы, данные - все перенес. Но естественно теперь методы на сайте по работе с БД не работают, либо работают не так как нужно. Вот пытаюсь переписать потихоньку их. Так вот если вставка - это операция не самая частая и в принципе тот вариант, который сейчас заработал меня устраивает, то вот операция поиска по большому( до 100к строк ) довольно частая, имеется ввиду на входе имеем к примеру 60к строк и нужно ответом от БД получить, что из этого есть в БД. Вот как это правильно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 15:36 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, то есть планируете загружать 1 млн строк в одном пакете? Это 30-40 мегабайт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 16:06 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов _BBC_, то есть планируете загружать 1 млн строк в одном пакете? Это 30-40 мегабайт? Нет. На проверку( загрузка через textarea ) более 60к строк вряд ли будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 16:20 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
_BBC_, может как-то STRING_SPLIT() прикрутить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 16:53 |
|
||
|
Множественное добавление записей
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов _BBC_, может как-то STRING_SPLIT() прикрутить... В итоге решил все достаточно просто, не знаю на сколько верно конечно, но работает быстро: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 21:21 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39887415&tid=1686941]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 531ms |

| 0 / 0 |
