Делаю так:
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("с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.