#0
by avz07
я раньше написал функцию в Microsoft SQL Server Management Studio. теперь хочу ее код с 1С передать на выполнение в SQL и получить результат. все организовать хочу через sql-dmo. но у меня не получается. Пожалуйста, помогите мне пожалуйста. вот функция: CREATE FUNCTION RES_PO_POLYU RETURNS int BEGIN DECLARE @RES int IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME='kod_1c') END GO
#2
by avz07
если я правильно понял, должно быть так: СтрокаПровSQL="CREATE FUNCTION RES_PO_POLYU а параметр без изменений Messages,или здесь должна быть переменная которую возвращает функция?
#3
by avz07
извиняюсь RSProv=СКЛ.Databases(Строка(БД)).ExecuteWithResultsAndMessages2(СтрокаПровSQL ,Messages) asQueryResults; .
#5
by avz07
это пример на тестовой базе. есть бага бд по которым надо выполнять время от времени эту функцию
#6
by Новенький_2009
Был у меня пример где-то. Я тоже ёпся долго ;) Если найду - кину. Но я через ADO делал.
#10
by etc
не проще ли через ADO подсоединиться и сделать что-то типа: ADOConnection.Execute("CREATE FUNCTION RES_PO_POLYU ...
#11
by avz07
попытался так: и мне выдало ошибку: {Форма.Форма.Форма(2152)}: Ошибка при вызове метода контекста (Execute) RSProv=Команда.Execute; по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Incorrect syntax near 'GO'. в SQL эта функция работает хорошо.не могу понять, почему системе не воспринимает оператор GO??
#12
by oleg_km
Потому что GO Это не оператор T-SQL, это оператор QA. Смело выкидываейте его и все будет работать
#13
by avz07
удалил GO и заработало. но когда второй раз выполнил код мне выдало ошибку: {Форма.Форма.Форма(2152)}: Ошибка при вызове метода контекста (Execute) RSProv=Команда.Execute; по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): There is already an object named 'RES_PO_POLYU' in the database. как выполнять эту функцию повторно? возможно удалять ее после выполнения?
#18
by avz07
спасибо, но к сожалению так не подойдет, потому что без оператора GO пакет не передаст на исполнение..а этот GO вообще есть возможность заменить или что-то в этом роде??
#19
by ДенисЧ
"без оператора GO пакет не передаст на исполнение" Слушай... Поделись рецептиком.. Что такое забористое ты выпил?
#21
by avz07
Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.Open(СтрокаСоединение); Соединение.Execute("IF OBJECT_ID(N'dbo.REZ',N'FN')IS NOT NULL
#23
by avz07
а если с GO, то вот такая ошибка: {Форма.Форма.Форма(2136)}: Ошибка при вызове метода контекста (Execute) Соединение.Execute("IF OBJECT_ID(N'dbo.REZ',N'FN')IS NOT NULL по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Incorrect syntax near 'GO'.
#25
by avz07
{Форма.Форма.Форма(2136)}: Ошибка при вызове метода контекста (Execute) Соединение.Execute("IF OBJECT_ID(N'dbo.REZ',N'FN')IS NOT NULL по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): 'CREATE FUNCTION' must be the first statement in a query batch.
#26
by avz07
возможно я неверно написал, возможно чего-то не знаю, не понимаю хорошо. подскажите или сбросьте какую-то литературу где такая ситуация описана.
#28
by etc
раздели на 2 execut_а: Соединение.Execute("IF OBJECT_ID(N'dbo.REZ',N'FN')IS NOT NULL DROP FUNCTION dbo.REZ;"); Соединение.Execute("CREATE FUNCTION dbo.REZ |RETURNS int
#29
by etc
"GO — это не инструкция Transact-SQL; это команда, распознаваемая программами sqlcmd и osql, а также редактором кода среды Среда SQL Server Management Studio. Программы SQL Server интерпретируют команду GO как сигнал о том, что им следует отправить текущий пакет инструкций Transact-SQL экземпляру SQL Server." ... "потому что гладиолус"
#30
by avz07
спасибо за помощь! я к этому дочитался. Но если разделить на две части, не увеличится ли время выполнения?
#31
by etc
Даже если бы это увеличивало время выполнения на пару секунд, у тебя что создание функции самая часто используеая операция? Наверняка максимум 1 раз за сессию.
#40
by Serginio1
CREATE FUNCTION dbo.REZ тебе ничего не вернет. Результат возвращает Select (не помню как там насчет No Count)
#45
by avz07
да. эта функция будет вызывать 1 раз, только когда будет запускаться внешняяобработка с ней
#50
by avz07
вот что у меня получилось, но это не отражает результат: Соединение.Execute("CREATE FUNCTION dbo.REZ
#53
by Serginio1
И тебе не нужен NextRecordSet; он нужен когда вызываются несколько Select Проще использовать такой синтаксис Соединение.Execute("IF OBJECT_ID(N'dbo.REZ',N'FN')IS NULL |Begin или разделять запросы через ;
#55
by avz07
попытался модифицировать код скл и столкнулся с той же ошибкой: не уникальное имя функции в пакете. вот код: IF OBJECT_ID(N'dbo.REZ',N'FN')IS NOT NULL BEGIN DROP FUNCTION dbo.REZ; END ELSE BEGIN CREATE FUNCTION dbo.REZ END
#57
by avz07
Serginiol, большое спасибо за Вашу помощь! Я и так, как вы мне сбросили, пробовал делать. К сожалению ошибка все та же..
#58
by Serginio1
Смотрим такая конструкция должна работать IF OBJECT_ID (N'dbo.REZ', N'FN') IS NOT NULL DROP FUNCTION dbo.REZ; CREATE FUNCTION dbo.REZ FN = скалярная функция SQL Для проверки сделай запрос Select OBJECT_ID (N'dbo.REZ', N'FN')
#61
by avz07
да, такая конструкция работает, но с переключателем GO, который информирует об окончании пакета иструкций. А в пакете инструкций, имя функции должно быть уникальное (без повторений). Эту уникальность обеспечивал переключатель GO. разве что ADO интерпретирует его самостоятельно. Потому, что в СКЛ так работать не будет.
#63
by avz07
, я читал эти статьи. Возможно я что-то пропустил. но будто правельно все сделал и в Менеджере СКЛ, когда пробовал все пахало. А когда начал подстраиваться под 1С, то возникли трудности.
#65
by Serginio1
У меня такие конструкции Стр=" прекрасно работают. В пакетном запросе операторы разделяются ;
#66
by Ёпрст
автору надо просто делать как в и привет.. т.е делать отдельными запросами дроп и креайт функции .. и усё.
#67
by Serginio1
Можно и так, только можно и в одно пакетном запросе. Просто на семерке в 1с++ приходится включать set nocount on ТекстЗапроса=" |set nocount on
#70
by Serginio1
Есть возможность выполнения нескольких операторов разделенных точкой с запятой. А вот откуда у него ошибки это вопрос и какой у него MS SQL
#71
by Serginio1
По set nocount on разобрался В ADO Insert возвращает recordset если set nocount off
#75
by avz07
в 1С пишет что ошибка метода Execute по причине:произошло исключительная ситуация... А Менеджер СКЛ видает такое: Сообщение 111, уровень 15, состояние 1, строка 6 'CREATE FUNCTION' must be the first statement in a query batch. Сообщение 178, уровень 15, состояние 1, строка 14 A RETURN statement with a return value cannot be used in this context. подчеркивает CREATE FUNCTION dbo.REZ
#76
by avz07
обидно что мне не получается написать все одним пакетом, но надо сдать задание .. если кто-то посоветует еще что-небуть, буду сердечно благодарен. а так, всем спасибо за участие в обсуждении!
#77
by Serginio1
Да смутно припоминаю на ограничения для функций, что они дожны быть первыми в пакетном запросе. Так, что ничего страшного.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Как при записи эл-та справочника его реквизиту присвоить значение номера эл-та?
- Выражение представления в СКД
- Подскажите бесплатный конвертер с pdf to xls
- Почему условие не исполняется, а код внутри условия срабатывает?
- Правильно ли передаются значения в запрос
- ВР и ПР
- Выплата зарплаты работнику УТ 11 - не видно в расходах - почему?
- v7: Периодически возникает ошибка при создании объекта из компоненты. Терминал
- УФ: Как программно заполнить параметры СКД в отчете при выборе варианта?
- Условия сортировки в конструкторе запроса 1С?
- Проверить, что в строке только цифры
- УФ. Полоса регулирования в колонке табличной части
- Галочка "отразить в бух. учете". Управление торговым предприятием.
- v7: Медленное удаление помеч.на удаление документов после обрезки базы
- Как вывести область под присоединенной в ТабДоке?
- Помогите с ремонтом базы: Tool_1CD "Несовпадение длины Blob-поля..."
- Вывести в отчет оборот за 9 месяцев
- Как раздать 50 программных пользовательских лицензий с Линукс-машины?
- СоздатьWSПрокси + авторизация
- Разворачивание узлов Дерева значений в режиме просмотра Иерархический список