Создание пользовательской функции с помощью CLR.Net (С#) в MS SQL Server.

Тут я показывал как можно определять сколько раз подстрока встречается в строке. Для этого мы создали обычную пользователскую функцию с помощью T-SQL.
Сейчас я покажу как сделать то же самое с помощью функции написанной с применением технологии SQLCLR.
1) Для начала нам потребуется создать в среде Visual Studio проект с типом Class Library:

using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace CLRFunctions
{
    public static class CLRFunctions
    {
        [SqlFunction(
            DataAccess = DataAccessKind.None
            , IsDeterministic = true)
        ]
        public static SqlInt32 substring_cnt(string where, string what)
        {
            int i = 0;
            i = (where.Length - where.Replace(what, string.Empty).Length) / what.Length;
            return (SqlInt32)i;
        }
    }
}

Далее потребуется скомпилировать проект и получить библиотеку CLRFunctions.dll. Этот файл следует поместить в каталог, доступный для SQL Server.

2) Далее для того, чтобы можно было использовать библиотеки CLR, необходимо разрешить использование CLR на вашем сервере MS SQL:

sp_configure 'clr enabled', 1
reconfigure
go

3) Теперь можно создать Assembly на сервере:

create assembly CLRAssembly from 'c:\CLR\CLRFunctions.dll' with permission_set = safe
go

и пользовательскую функцию:

create function dbo.substring_cnt(@where nvarchar(1000), @what nvarchar(100))
returns int
as
	external name CLRAssembly.[CLRFunctions.CLRFunctions].substring_cnt

Применение функции:
select	dbo.substring_cnt('Hello, World!', 'o')

Оставить комментарий

Обязательные поля *

Вы можете использовать следующие HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>