Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема длинные строки в ВыполнитьSQL_ИзТЗ (число прочтений - 2684 )
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
длинные строки в ВыполнитьSQL_ИзТЗ
21. Марта 2008 :: 14:04
Печать  
Делаю так:
Код
Выбрать все
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("с1", "Строка", 64);
ТЗ.НоваяКолонка("с2", "Строка");
Для Сч = 1 По 5 Цикл
	ТЗ.НоваяСтрока();
	ТЗ.с1 = "Атр"+Сч;
	ТЗ.с2 = "Знач"+Сч;
КонецЦикла;

ЛогБаза.Подготовить("INSERT INTO ChangedAttribs VALUES (?, ?)");
ЛогБаза.ВыполнитьSQL_ИзТЗ(ТЗ);
 


в профайлере вижу корректное опеределение типов полей:
Код
Выбрать все
exec sp_prepare @p1 output,N'@P1 varchar(64),@P2 text',
N'INSERT INTO ChangedAttribs VALUES (@P1, @P2)',1
 


т.е. по идее и должна передаваться и храниться строка неограниченной длины.
однако далее наблюдаю
Код
Выбрать все
exec sp_execute 1,'Атр1    ',''
 


то есть второй параметр урезался до нуля символов.
хорошо. провожу явную типизацию полей:
Код
Выбрать все
ЛогБаза.ДобПараметр(1, 14, 64, 0);
ЛогБаза.ДобПараметр(1, 15, 0, 0); // длина строки неограниченной длины равна 0
 


вижу такое:
Код
Выбрать все
exec sp_prepare @p1 output,N'@P1 char(64),@P2 varchar(max)',
N'INSERT INTO ChangedAttribs VALUES (@P1, @P2)',1
exec sp_execute 1,'Атр1      ','З'
 


то есть строка неграниченной длины урезалась тихо-мирно до одного символа.
при явном указании длины строки все нормально, но... вариант не подходит, потому как действительно строка может быть ОЧЕНЬ длинной.
где что ковырять?

P.S. 1С++ версии 2.5.0.5.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: типизация строк неограниченной длины в Выполни
Ответ #1 - 21. Марта 2008 :: 14:13
Печать  
Цитата:
ЛогБаза.ДобПараметр(1, 15, 0, 0); // длина строки неограниченной длины равна 0

varchar не бывает неограниченной длинный (и нулевой длины тоже)
из bol:
Цитата:
Variable-length non-Unicode character data with length of n bytes. n must be a value from 1 through 8,000

а вот актуальные длина данных может быть от 0 до n
  

1&&2&&3
Наверх
 
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: длинные строки в ВыполнитьSQL_ИзТЗ
Ответ #2 - 21. Марта 2008 :: 14:21
Печать  
может, это было необходимо сразу уточнить...
SQL2005. в нем есть новый тип varchar(max), к которому и приводится второй параметр. так что здесь все нормально.
описание типа varchar(max)
  
Наверх
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: длинные строки в ВыполнитьSQL_ИзТЗ
Ответ #3 - 31. Марта 2008 :: 06:50
Печать  
как бы там ни было с типами данных, нормально заставить съедать ВыполнитьSQL_ИзТЗ() длинные строки у меня не получилось.
пришлось использовать кучу запросов в цикле, как самый простой вариант.
  
Наверх
IP записан
 
DmSk
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Барнаул
Зарегистрирован: 28. Марта 2008
Пол: Мужской
Re: длинные строки в ВыполнитьSQL_ИзТЗ
Ответ #4 - 04. Апреля 2008 :: 10:22
Печать  
Может это про то (последняя строка)  Озадачен
Подробности см. в документации.

Версия 1.8.0.0
- Исправлена ошибка допущеная при внесении изменений в релизе 1.7.2.3, а именно:
"В группу базовых методов классов: ПолучитьБазовыйКласс()/GetBaseClass() и НазначитьБазовыйКласс()/AssignBaseClass()
добавлена поддержка английских синонимов объектов 1С, таких как Документы, Справочники, Регситр, Регситры,
соответственно: Document, Reference, Register, Registers. Учет видов некоторых из этих объектов не изменился."
- Исправлена ошибка, в некоторых случаях не работала АвтоТипизация
- Добавлена возможность чтения полей строк с неограниченной длиной.

ВНИМАНИЕ: запись строк с неограниченной длиной
запрещена.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать