Как стать автором
Обновить

Комментарии 6

У меня один вопрос- зачем?!
Ответ в первых двух абзацах.
не покидая Management Studio, изменять поведение своих процедур

продвинутый парсинг строк, в котором приходится использовать регулярные выражения или просто хитрый и закрученный алгоритм

Переформулирую вопрос более развернуто.
1-Мое Вам уважение, что Вы это провернули! Задачка не является тривиальной и до нее еще додуматься надо.

2-Почему так важна возможность «хочется, не покидая Management Studio, изменять поведение своих процедур» Вы ведь сами сказали- «иногда требуется».
При этом единственным преимуществом является- отсутствие необходимости перекомпилировать и обновлять clr сборку… При том, что сразу всплывет куча проблема (Ради иногда нужно писать код не на 2 языках, а на 3… а там уже куча всяких тонких моментов всплывет, о которых не рассказывают евангелисты на презентациях)

Если задача одноразовая — то можно и просто на C# через какой-нибудь ef написать маленькую программку, сделать и выкинуть ее.
Если многоразовая-типовая- то вряд ли вам будет нужно менять код. Написать на .net clr без всяких dlr и пусть работает.
Если многоразовая не типовая- то тогда действительно наверное использование более мощного языка программирование оправдано.

питоновскую консоль и в sl вставляли и в веб контролы и еще куда-то… в итоге дальше примеров, не слышно что это кто-то использовал по настоящему.

P.s. в 2012 студии большой кусок management studio встроен уже в ide. Я лично не открываю management studio довольно давно за ненадобностью.
С Вашими доводами согласен. Именно поэтому в заключении
Не стоит пытаться переписывать все ваши хранимые процедуры и функции с использованием IronPython.

Мне было интересно сделать это, между прочим, как раз после того как в один из проектов на Silverlight я встроил консоль python.
Мы писали собственную CLR-сборку для агрегирующей функции и столкнулись с органичением в 8000 байт для данных, судя по MaxByteSize = 8000, в этом решении оно тоже присутствует?
В коде примеров да, но его можно убрать:
1. В примере я везде использую тип sql_variant, который сам по себе не может содержать значение более 8 000 байт. Если переписать функцию pyAggregate и вместо object (соответствующий которому тип sql_variant) использовать string (соответствующий тип nvarchar(MAX)) то функция сможет возвращать значения более 8 000 байт.
2. Сможет возвращать, но не сможет хранить. И Вы будете получать ошибку вида
A .NET Framework error occurred during execution of user-defined routine or aggregate «pyAggregate»:
System.Data.SqlTypes.SqlTypeException: Недостаточный размер буфера. Сбой операции чтения или записи.

Основываясь на документации свойство MaxByteSize устанавливает максимальный требуемый размер буфера для хранения данных функции во время вычислений. Если указать значение -1, то размер буфера увеличивается до 2 Гб.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории