|
ограничение Command.CommandText на количество символов | ☑ | ||
---|---|---|---|---|
0
Radkt
11.07.17
✎
14:17
|
Код:
Command.CommandText = "merge dbo.Base_tab as dst |using (select " +id_query1c+" as id_query1c," +id_querydp+" as id_querydp," +ИБ.id+ " as bd, " +"'"+СтрокаИзТЗ+"'"+" as bin_tab) as src |on (dst.id_query1c = src.id_query1c and dst.id_querydp = src.id_querydp and dst.bd = src.bd) |when matched then update set dst.bin_tab = src.bin_tab |WHEN NOT MATCHED BY TARGET THEN |INSERT ( id_query1c, id_querydp, bd, bin_tab) VALUES ( " +id_query1c+", "+id_querydp+", "+ИБ.id+", "+"'"+СтрокаИзТЗ+"'"+" );"; Колсимв = СтрДлина(Command.CommandText); Command.CommandTimeout = 500; RecordSet = Command.Execute(); Connection.close(); Стало неприятным открытием Command.CommandText имеет ограничение на количество символов. т.е. СтрокаИзТЗ очень большая и когда малый объем данных пишешь все работает, а когда большой то вываливается с ошибкой. "Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): [DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation." Сначала было сделано через метод записать() Внешнего источника данных, тоже с большой строкой не прокатывало Люди знающие SQL подскажите как обойти это ограничение без перестроения таблиц в SQL? Может есть скрипт который расширяет или снимает ограничение. |
|||
1
Serginio1
11.07.17
✎
14:53
|
Попробуй использовать .Net
https://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802 https://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlconnection(v=vs.110).aspx Здесь есть кроссплатформенный пример http://catalog.mista.ru/public/544232/ Но можно использовать и не кроссплатформенный без Ъ |
|||
2
МихаилМ
11.07.17
✎
14:57
|
зависит от драйвера.
в odbc мс скл раньше было ограничение 64к на размер текста запроса. а в oledb 2Mb. как сейчас - не знаю |
|||
3
Serginio1
11.07.17
✎
14:59
|
||||
4
Вафель
11.07.17
✎
15:00
|
может на временные таблицы переделать?
|
|||
5
vde69
модератор
11.07.17
✎
15:02
|
(2) +1
еще есть такое ограничение - текст запроса должен полностью помещаться в физическую память, то есть если физической памяти мало (а используется своп) то размер текста запроса равен минимальному размеру памяти выделяемому на запрос (на память вроде 2 кб, это примерно 4 экрана текста). то есть текст заброса не может помещаться в своп памяти !!! |
|||
6
vde69
модератор
11.07.17
✎
15:03
|
(5) + вместе с параметрами если они есть
|
|||
7
Serginio1
11.07.17
✎
15:05
|
Можешь использовать SqlBulkCopy и DataTable
https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx |
|||
8
Serginio1
11.07.17
✎
15:07
|
7+ Про использование DataTable в 1C можно посмотреть здесь
http://catalog.mista.ru/public/525806/ То есть можно заполнять ТЗ конвертировать в DataTable и используя SqlBulkCopy вставлять в таблицу |
|||
9
trdm
11.07.17
✎
15:31
|
(0) > Колсимв = СтрДлина(Command.CommandText);
И какая длина? |
|||
10
Radkt
11.07.17
✎
15:58
|
(3),(7),(8) спасибо посмотрю, но боюсь Сб завернет сторонние "не безопасные" компоненты.
(5),(6) Спасибо за информацию, но оперативки 40 из 128 занято (9) 342 492 253 |
|||
11
trdm
11.07.17
✎
16:02
|
Может зиповать квери?
|
|||
12
trdm
11.07.17
✎
16:03
|
едрить. скуль запрос размером в 342 Мб О_О...
Надо что-то делать.. |
|||
13
Radkt
11.07.17
✎
16:07
|
(12) Тоже считаю, что спроектированная система мягко говоря не идеальна)
Видимо придется данные бить на части, а потом при получении объединять, а так не хотелось структуру менять(( |
|||
14
Radkt
11.07.17
✎
16:16
|
Может можно перенести нагрузку на параметры? чтобы параметры весили 300Мб, а не сам запрос?
|
|||
15
Serginio1
11.07.17
✎
16:22
|
(10) Можешь написать свою COM компоненту. Там не сложно
|
|||
16
spock
11.07.17
✎
16:30
|
Чего гадать? Уложить во временную таблицу, потом лалалай.
|
|||
17
Serginio1
11.07.17
✎
16:30
|
А вообще раз ты используешь merge то можешь создать текстовый файл, с помощью
|INTO #TempPrice |FROM OPENROWSET( BULK N'"+ФайлСПрайсом+"', |FORMATFILE = N'"+ИмяФайлаФрмата+"',"; Кто силен в SQL? Команда MERGE интересует. |
|||
18
Serginio1
11.07.17
✎
16:32
|
||||
19
trdm
11.07.17
✎
16:42
|
Я по тексту запроса не понял, какая задача решается.
|
|||
20
Radkt
11.07.17
✎
18:04
|
(19) Обновление/добавление строки таблицы
|
|||
21
Radkt
11.07.17
✎
18:05
|
(17) И хранить в базе пути к файлу? вместо самого текста?
|
|||
22
trdm
11.07.17
✎
18:08
|
(20) я не о том, что там за данные обрабатываются?
|
|||
23
Radkt
11.07.17
✎
18:13
|
(22) это серкет фирмы) в общем стат данные
|
|||
24
trdm
11.07.17
✎
18:24
|
серкеты дело святое.
|
|||
25
dmitryds
11.07.17
✎
18:37
|
(0) а может просто неэкранированный спецсимвол попадается? (вроде бы можно использовать параметры для обхода этого)
|
|||
26
Radkt
11.07.17
✎
18:41
|
(25) нет, тогда бы он попадался и в другом периоде,
ЗначениеВСтрокуВнутр() применяется к таблице |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |