Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как запустить bcp с параметрами из TSQL?  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
Дописав, худо-бедно скрипт, на клиенте столкнулся с невозможностью заинсертить овер 1000 записей в БД.

The number of row value expressions in the INSERT statement exceeds the maximum allowed number of 1000 row values.

Для этой цели решил воспользоваться пакетным обработчиком bcp.
Но, напрямую, с удалённого сервера я не могу запустить ехешник. Выходит, дыра только через запрос.

Так вот, можно ли выполнить запрос, чтобы запустить bcp да ещё передав ему список инструкций Insert?
15 авг 19, 11:41    [21949930]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
palladin600
Дописав, худо-бедно скрипт, на клиенте столкнулся с невозможностью заинсертить овер 1000 записей в БД.

The number of row value expressions in the INSERT statement exceeds the maximum allowed number of 1000 row values.

Для этой цели решил воспользоваться пакетным обработчиком bcp.
Но, напрямую, с удалённого сервера я не могу запустить ехешник. Выходит, дыра только через запрос.

Так вот, можно ли выполнить запрос, чтобы запустить bcp да ещё передав ему список инструкций Insert?
А что мешает побить на запросы с менее чем 1000 записей?
15 авг 19, 11:42    [21949931]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
palladin600,

переписать через INSERT... SELECT ... UNION ALL

оставльное не получилось расшифровать
15 авг 19, 11:44    [21949935]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
Разбивать каждый раз на порции, на мой взгляд, интересная идея, но что-то в ней не то.
Очевидно, что для таких операции batch command proccesor более предназначенный.

Так вот всё же, можно ли запустить bcp?
В сети нахожу примеры запуска bcp только для экспорта данных из БД в файл. А нужна обратная процедура из файла в БД.

Т.е. должен быть какой-то синтаксис вида:
DECLARE @sql as ...
SET @sql = 'bcp "EXEC [Database].' + 'мой список инструкций'
...
15 авг 19, 11:54    [21949949]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
andy st
Member

Откуда:
Сообщений: 796
palladin600
Разбивать каждый раз на порции, на мой взгляд, интересная идея, но что-то в ней не то...

begin transaction и т.д.?
15 авг 19, 12:00    [21949957]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
palladin600
Разбивать каждый раз на порции, на мой взгляд, интересная идея, но что-то в ней не то.
Очевидно, что для таких операции batch command proccesor более предназначенный.

Так вот всё же, можно ли запустить bcp?
В сети нахожу примеры запуска bcp только для экспорта данных из БД в файл. А нужна обратная процедура из файла в БД.

Т.е. должен быть какой-то синтаксис вида:
DECLARE @sql as ...
SET @sql = 'bcp "EXEC [Database].' + 'мой список инструкций'
...
bcp - отдельная утилита для загрузки данных в базу, а не программное расширение для Management Studio, или чем вы там пользуетесь.
Попытка написать
DECLARE @sql as ...
SET @sql = 'bcp "EXEC [Database].' + 'мой список инструкций'
...

для меня выглядит как удаление гланд через анальное отвестие, простите.

Ну если очень хочется, то ваш путь идет в сторону xp_cmdshell, но, на мой взгляд, это категорически неверный путь.
15 авг 19, 12:03    [21949962]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
palladin600,

ещё раз: почему вы решили что ваша конструкция INSERT INTO VALUES ++1000row зайдёт которая не заходит, зайдёт через bcp?
15 авг 19, 12:08    [21949968]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
TaPaK,
не претендую на ценность высказывания, но если своими словами, то потому что, средства производительности сервера предварительно высчитали, что подобный инсерт нагнёт бд на какое-то время, что выходит за временные рамки обслуживания запроса.
bcp - работает иначе, при проведении инструкций отключается ряд проверок, что позволяет в значительной мере быстрее исполнить запрос.
15 авг 19, 12:13    [21949974]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
uaggster
Member

Откуда:
Сообщений: 767
palladin600
Дописав, худо-бедно скрипт, на клиенте столкнулся с невозможностью заинсертить овер 1000 записей в БД.

The number of row value expressions in the INSERT statement exceeds the maximum allowed number of 1000 row values.

Для этой цели решил воспользоваться пакетным обработчиком bcp.
Но, напрямую, с удалённого сервера я не могу запустить ехешник. Выходит, дыра только через запрос.

Так вот, можно ли выполнить запрос, чтобы запустить bcp да ещё передав ему список инструкций Insert?

Ты, наверное, с использованием табличного конструктора вставлял?
insert into table_1 
Values (...),
 (...),
...
 (...)

Так да. Есть ограничение в 1000 строк.

Перепиши через Select из табличного конструктора.
Оно такого ограничения - не имеет:
insert into table_1 
Select * from 
(Values (...),
 (...),
...
 (...)
) tbl (field1, ... ,fieldN)
15 авг 19, 12:16    [21949975]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
uaggster
Ты, наверное, с использованием табличного конструктора вставлял?

Да, именно так! Спасибо за подсказку, видимо TaPaK в первом своём сообщении тоже имел в виду именно это.

Minamoto
Ну если очень хочется, то ваш путь идет в сторону xp_cmdshell, но, на мой взгляд, это категорически неверный путь.

Понял, судя по коментам, выходит, народ со стажем так не делает.
15 авг 19, 12:22    [21949984]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 641
palladin600
Очевидно, что для таких операции batch command proccesor более предназначенный.

Если не выдумать расшифровки самому а читать хелп, хотя бы на русском, то не будет таких ляпов
https://docs.microsoft.com/ru-ru/sql/tools/bcp-utility?view=sql-server-2017
Служебная программа "bulk copy program" (bcp) используется для массового копирования данных между экземпляром Microsoft SQL Server и файлом данных в указанном пользователем формате
15 авг 19, 13:36    [21950066]     Ответить | Цитировать Сообщить модератору
 Re: Как запустить bcp с параметрами из TSQL?  [new]
uaggster
Member

Откуда:
Сообщений: 767
palladin600
Понял, судя по коментам, выходит, народ со стажем так не делает.

Ну почему "не делает"?
Когда мне нужно однократно, эпизодически, вставить до 2-3 тысяч строк, ну хорошо, 10 - я именно так и делаю.
Это быстрее и удобнее, чем возиться с любым другим способом помещения данных на сервер.

Есть даже лайфхак с Экселем для этого.
Пусть есть табличка в Экселе. Рисуешь в столбце формулу, типа такой:
= "('" & A2 & "', " & D2 & "),"
Она генерирует строчки типа:
('Тест', 1),
Ну и, дальше, копи-паста в окошко SSMS, и выполняешь insert from values.
Гораздо быстрее, при некотором навыке, чем импортировать данные другими способами.
Для однократного перетаскивания данных - самое то.
15 авг 19, 13:37    [21950067]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить