Однажды нужно было выполнить небольшой SQL-запрос весом в 100 килобайт:
UPDATE[dbo].[tbl_Query] SET QueryData = 0x3c3f{ещё сто тысяч буковок и циферок}13e0a WHERE ID ='b10832f4-5f3f-4c94-bc05-329d9b4525cf'
Проблема была в том, что на компьютере, на котором это надо было выполнить, был установлен только Query Analyzer из MS SQL Server 2000, который отказывался открывать файлы больше 64К и даже вставлять текст такого размера из буфера обмена. Ведь 64 килобайта хватит каждому!
Помогло создание в Terrasoft XRM скрипта с таким текстом:
function Main(){ var Parameters = System.CreateObject('TSObjectLibrary.Parameters'); try{
Connector.DBEngine.ExecuteCustomSQL( "update [dbo].[tbl_Query] set QueryData = 0x3c3f{ещё сто тысяч буковок и циферок}13e0a where ID = 'b80832f4-5f2f-4c74-bc05-349d9b4525cf'",
Parameters); }catch(e){
Log.Write(1, e.message); }
}
Запускаем его из TSAdmin по клавишей F9, и содержимое таблицы обновилось.
Александр, ограничение 64к не спроста. MSSQL сервер не может выполнить запрос который длиннее - это ограничено на уровне ядра СУБД. Подробности здесь
Вывод: ExecuteCustomSQL не спасет, если запрос длинный, вам его необходимо разбить на части или если одним файлом, то разделить GO (или параметром который укажите для консольной утилиты). Про утилиты можно прочитать здесь
Александр, я думал вы выполняли большой sql скрипт, а не загружали данные в одно поле.
Тогда ваше решение имеет нюанс - достигнув ограничения Batch size вас не спасет ExecuteSQLText - сервер физически не сможет принять ваш запрос в виде текста и выполнить. Если необходимо загрузить БОЛЬШОЙ объект в блоб поле, то или писать кастомную утилиту и там использовать параметры или попробовать openrowset
В Администраторе Terrasoft CRM уже есть некоторые функции, о которых большинство пользователей знают, но кому-то они окажутся ранее неведомой полезностью.
Подсказки и дополнения
При нажатии [Ctrl] + [пробел] показывается список функций, название которой совпадают с тем, что начал водить пользователь.
При нажатии [Shift] + [пробел] происходит автодополнение популярных конструкций (if, for, function). Для этого должен быть наполнен файл AutoComplete.cfg. Пример содержимого такого файла.
Список функций в скрипте
Нажимаем [Ctrl] + [G] или выбираем пункт в меню "Поиск" и видем окно:
Туда и обратно
Чтобы перейти от вызова функции к её определению, нажимаем на название функции мышью с зажатым [Ctrl]. Чтобы после этого вернуться обратно, нажимаем [Alt] + [←] (стрелочка "влево").
Двигаем блоки
Чтобы красиво оформить код в соответствии с о структурой for-ов, if-ов и функций, нужно делать отступы. Чтобы из такого:
function GetEnumControlValue(EnumControl){ varItem= EnumControl.Value; var Result =(Item?Item.Code:null) return Result; }
получить такое:
function GetEnumControlValue(EnumControl){ varItem= EnumControl.Value; var Result =(Item?Item.Code:null) return Result; }
выделяем мышью средние строки и нажимаем [Tab]. Они вместе сдвигаются вправо на табуляцию. Нажатие [Shift] + [Tab] сдвигает влево.
Поиск по всем скриптам проекта
Он же Grep search. О нём точно каждый пользователь знает, но мало ли. Вызывается из меню "Инструменты" или клавишами [Shift] + [Alt] + [S]:
В версии для Oracle поиск работает очень неспешно, в MS SQL – шустрее.
Не плохо-бы такие вещи отражать в документации. Особенно вот это: "Поиск по всем скриптам проекта". К тому же добавить вот это: http://www.community.terrasoft.ru/blogs/6549, а ещё вот это: http://www.community.terrasoft.ru/developer/advice/4576 и ещё много чего...
Это же так просто, даже писать ничего не надо. Берёте текст из подобного поста и вставляете в документацию.
50% ответов на возникающие вопросы я нахожу на коммьюните, 40% - прямые обращения и лишь 10% - в документации. Это неправильная ситуация.