Создание пользовательской функции CLR в .Net

#.net #class-library #sqlclr #sql-function

#.net #class-library #sqlclr #sql-функция

Вопрос:

я хочу создать функцию CLR, я создал обычный файл библиотеки классов и закодировал, как показано ниже, я не хочу использовать SqlServerProject, поскольку я не могу найти там некоторые классы.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Types;

    namespace ClassLibrary1
    {
        public partial class Class1
        {
            [Microsoft.SqlServer.Server.SqlFunction]
            public static SqlString GetPassword(SqlString Value)
            {
                return Value;
            }
        }
    }
  

я скомпилировал код и создал сборку из sqlserver следующим образом

 CREATE ASSEMBLY ASSEM
authorization dbo
FROM 'E:NBM Sitestvt.stage.asentechdev1.comClassLibrary1.dll' WITH PERMISSION_SET = SAFE;
  

и создал функцию, как показано ниже

 CREATE FUNCTION SampleFunc
(   
    @value nvarchar(max)
)
RETURNS nvarchar(max) with execute as caller
AS
    External Name ASSEM.Class1.GetPassword
GO
  

но вышеупомянутая функция create выдала сообщение об ошибке.

 Could not find Type 'Class1' in assembly 'ClassLibrary1'.
  

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

Ответ №1:

Вам не хватает пространства имен, в котором находится ваш класс (ClassLibrary1). Таким образом, правильный оператор create function является:

 CREATE FUNCTION SampleFunc
(   
  @value nvarchar(max)
)
RETURNS nvarchar(max) with execute as caller
AS
  External Name [ASSEM].[ClassLibrary1.Class1].[GetPassword]
GO