Ну да и нет.Это зависит от того, что именно вы подразумеваете под «вызовом функции».
Если вы говорите с точки зрения вызова метода непосредственно из T-SQL, то да, каждый открытый метод нуждается в объекте-обертке T-SQL длядействовать как мост между ними (T-SQL и CLR).Эта интерпретация вопроса была сделана в ответе @ Mithrandir.
Однако, если вы говорите с точки зрения частных / внутренних методов в вашей сборке, то нет, им не нужны объекты-обертки T-SQL,Эта интерпретация основана на этом утверждении:
Моя первая мысль была: «Отлично, теперь мне не нужно добавлять 25 хранимых процедур и функций, чтобы сделать мои основные хранимые процедуры читабельными. Я просто создаю одинDLL и добавьте в него все, что мне нужно. "
Это утверждение подразумевает, что нужно иметь некоторые внутренние методы, которые вызываются открытыми методами, чтобы у вас не было так многовызовы загромождают основную процедуру.Открытые методы (т. Е. Методы с объектами-обертками T-SQL) могут совместно использовать служебные методы и даже могут ссылаться на другие сборки, если эти другие сборки:
- в той же базе данных и
- имеет того же авторизующего пользователя
Эти служебные методы могут по-прежнему осуществлять доступ к данным с помощью Context Connection, при условии, что они вызываются из методов, которые доступны для T-SQL (т.е. имеютатрибут SqlFunction
, SqlProcedure
и т. д. и соответствующий объект-оболочка T-SQL).
Вы даже можете создать сборку, которая не имеет открытых методов и содержит только код, на который ссылаются ваши другие сборки.В этом случае вы можете использовать ALTER ASSEMBLY , чтобы установить для свойства VISIBILITY
значение OFF
(это невозможно сделать с помощью CREATE ASSEMBLY
).Если вы DROP
сборка, которая ссылается на другую сборку, для которой VISIBILITY
установлено значение OFF
, то невидимая сборка будет автоматически удалена, как каскадное удаление с помощью внешнего ключа.