Комментарии 6
У меня один вопрос- зачем?!
0
Ответ в первых двух абзацах.
не покидая Management Studio, изменять поведение своих процедур
продвинутый парсинг строк, в котором приходится использовать регулярные выражения или просто хитрый и закрученный алгоритм
0
Переформулирую вопрос более развернуто.
1-Мое Вам уважение, что Вы это провернули! Задачка не является тривиальной и до нее еще додуматься надо.
2-Почему так важна возможность «хочется, не покидая Management Studio, изменять поведение своих процедур» Вы ведь сами сказали- «иногда требуется».
При этом единственным преимуществом является- отсутствие необходимости перекомпилировать и обновлять clr сборку… При том, что сразу всплывет куча проблема (Ради иногда нужно писать код не на 2 языках, а на 3… а там уже куча всяких тонких моментов всплывет, о которых не рассказывают евангелисты на презентациях)
Если задача одноразовая — то можно и просто на C# через какой-нибудь ef написать маленькую программку, сделать и выкинуть ее.
Если многоразовая-типовая- то вряд ли вам будет нужно менять код. Написать на .net clr без всяких dlr и пусть работает.
Если многоразовая не типовая- то тогда действительно наверное использование более мощного языка программирование оправдано.
питоновскую консоль и в sl вставляли и в веб контролы и еще куда-то… в итоге дальше примеров, не слышно что это кто-то использовал по настоящему.
P.s. в 2012 студии большой кусок management studio встроен уже в ide. Я лично не открываю management studio довольно давно за ненадобностью.
1-Мое Вам уважение, что Вы это провернули! Задачка не является тривиальной и до нее еще додуматься надо.
2-Почему так важна возможность «хочется, не покидая Management Studio, изменять поведение своих процедур» Вы ведь сами сказали- «иногда требуется».
При этом единственным преимуществом является- отсутствие необходимости перекомпилировать и обновлять clr сборку… При том, что сразу всплывет куча проблема (Ради иногда нужно писать код не на 2 языках, а на 3… а там уже куча всяких тонких моментов всплывет, о которых не рассказывают евангелисты на презентациях)
Если задача одноразовая — то можно и просто на C# через какой-нибудь ef написать маленькую программку, сделать и выкинуть ее.
Если многоразовая-типовая- то вряд ли вам будет нужно менять код. Написать на .net clr без всяких dlr и пусть работает.
Если многоразовая не типовая- то тогда действительно наверное использование более мощного языка программирование оправдано.
питоновскую консоль и в sl вставляли и в веб контролы и еще куда-то… в итоге дальше примеров, не слышно что это кто-то использовал по настоящему.
P.s. в 2012 студии большой кусок management studio встроен уже в ide. Я лично не открываю management studio довольно давно за ненадобностью.
0
Мы писали собственную CLR-сборку для агрегирующей функции и столкнулись с органичением в 8000 байт для данных, судя по MaxByteSize = 8000, в этом решении оно тоже присутствует?
0
В коде примеров да, но его можно убрать:
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 Гб.
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 Гб.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Используем IronPython из Transact SQL