Справочная информация:
Visual Studio не удается развернуть проект базы данных. Он пытается отбросить функции, на которые уже есть ссылки (например, в проверочном ограничении), а не просто добавлять новые и обновлять существующие, поэтому развертывание всегда завершается неудачей.
В результате я пишу свой собственный код для обновления сборки и добавления / обновления любых функций.
Я предполагаю, что компилятор / развертыватель использует отражение и свойства атрибута SqlFunction, поэтому я также использую отражение для сбора списка MethodInfo статических методов, имеющих атрибут SqlFunction.
Вопрос / Задача:
Мне нужно знать, как преобразовать свойства SqlFunctionAttribute (например, IsDeterministic, DataAccess, Name, IsPrecise и т. Д.) И сигнатуру метода функции в соответствующий оператор T-SQL «CREATE FUNCTION».
Существующая информация, которую я уже нашел бесполезной:
Документация для 'create function' является запутанной и неполной. В конце он, наконец, упоминает некоторые свойства SqlFunction, такие как IsDeterministic, но говорит о них так, как будто они являются свойствами C #, а не параметрами T-SQL, поэтому я понятия не имею, как их использовать в операторе create function.
//CLR Functions
CREATE FUNCTION [ schema_name. ] function_name
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
[ WITH <clr_function_option> [ ,...n ] ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
Я бы ожидал, что параметр clr_function_option
будет обрабатывать такие вещи, как IsDeterministic, но он не указан как опция.
Между тем, в документации для IBM DB2 я вижу подобные утверждения, которые не имеют ничего похожего в документации MSDN:
CREATE FUNCTION countUp(INTEGER)
RETURNS INTEGER
LANGUAGE CLR
PARAMETER STYLE SQL
SCRATCHPAD 10
FINAL CALL
NO SQL
FENCED
THREADSAFE
NOT DETERMINISTIC
EXECUTION CONTORL SAFE
EXTERNAL NAME 'gwenUDF.dll:bizLogic.empOps!CountUp' ;