morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 
Мой морфер

Склонение фамилий в SQL Server

SqlMorpher.dll позволяет склонять фамилии, должности, названия городов и другие реквизиты в SQL Server и SQL Azure. Вы можете создавать вычисляемые колонки со значением нужного падежа, автоматически вставлять в поля падежные формы или просто вызывать функции склонения со стороны клиента базы данных.

Совместимость

SqlMorpher.dll работает на следующих платформах:

  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2008 R2
  • SQL Server 2012
  • SQL Server 2014
  • SQL Azure v12

Функция Падеж

CREATE FUNCTION dbo.Падеж (
    @s nvarchar (max), 
    @падеж nvarchar (6), 
    @признаки nvarchar (7)) 
RETURNS nvarchar (max)

@s – строка для склонения,

@падеж – требуемая падежная форма:

  • 'И' – именительный (без изменения)
  • 'Р' – родительный (кого? чего?)
  • 'Д' – дательный (кому? чему?)
  • 'В' – винительный (кого? что?)
  • 'Т' – творительный (кем? чем?)
  • 'П' – предложный (о ком? о чем?) без предлога
  • 'По' – предложный (о ком? о чем?) с предлогом О/ОБ/ОБО
  • 'Где' – предложный с предлогом В/НА – отвечает на вопрос где?
  • 'Куда' – винительный с предлогом В/НА – отвечает на вопрос куда?
  • 'Откуда' – с родительный предлогом ИЗ/С – отвечает на вопрос откуда?

Рекомендации по выбору варианта предложного падежа

@признаки – набор признаков, разделенных пробелом или запятой:

  • 'ФИО' – фамилия, имя или отчество
  • 'Гео' – географическое название
  • 'Нар' – нарицательное
  • 'Муж' – мужской род
  • 'Жен' – женский род

@признаки нужны, когда в словосочетании (@s) недостаточно информации для однозначного склонения, например:

select dbo.Падеж ('Любовь', 'Д', 'ФИО') -- Любови
select dbo.Падеж ('Любовь', 'Д', 'нар') -- Любви
 
select dbo.Падеж ('Полищук', 'Д', 'муж') -- Полищуку
select dbo.Падеж ('Полищук', 'Д', 'жен') -- Полищук

В остальных случаях признаки указывать необязательно:

select dbo.Падеж ('Любовь Полищук', 'Д', null) -- Любови Полищук
select dbo.Падеж ('Дмитрий Полищук', 'Д', null) -- Дмитрию Полищуку

Функция ПолучитьФамилиюПротивоположногоПола

CREATE FUNCTION dbo.ПолучитьФамилиюПротивоположногоПола (
    @фамилия nvarchar (max)) 
RETURNS nvarchar (max)

Данная функция строит фамилию женского рода для данной фамилии мужского рода и наоборот. Например:

select dbo.ПолучитьФамилиюПротивоположногоПола ('Пушкин') -- Пушкина
select dbo.ПолучитьФамилиюПротивоположногоПола ('Толстой') -- Толстая
select dbo.ПолучитьФамилиюПротивоположногоПола ('Лермонтов') -- Лермонтова

Для фамилий, не изменяющихся по родам, фамилия остается без изменений:

select dbo.ПолучитьФамилиюПротивоположногоПола ('Лещенко') -- Лещенко
select dbo.ПолучитьФамилиюПротивоположногоПола ('Заворотнюк') -- Заворотнюк
select dbo.ПолучитьФамилиюПротивоположногоПола ('Перельман') -- Перельман

Функция определения рода

SELECT dbo.ОпределитьРод ('Евгений') -- Мужской
SELECT dbo.ОпределитьРод ('Евгения') -- Женский
SELECT dbo.ОпределитьРод ('окно') -- Средний
SELECT dbo.ОпределитьРод ('часы') -- Множественное число
SELECT dbo.ОпределитьРод ('Petrov') -- Ошибка

Функция Пропись: формирование суммы прописью

CREATE FUNCTION dbo.Пропись (@число int, @единицаИзмерения nvarchar (max))
RETURNS TABLE (ПрописьЧисла nvarchar (max), ЕдиницаИзмеренияВНужномПадеже nvarchar (max))

Инструкция по установке

Модуль склонения интегрируется в SQL Server при помощи технологии под названием CLR Integration, появившейся в SQL Server начиная с версии 2005.

Комплект поставки:

  • Install.sql — скрипт установки библиотеки, включающий в себя двоичный код библиотеки;
  • Uninstall.sql — скрипт удаления библиотеки, рекомендуется запускать перед переходом на новую версию;
  • СуммаПрописью.sql — пример вывода суммы прописью с помощью функции Morpher.dll Пропись;
  • Install-Azure.sql — скрипт установки модуля в SQL Azure.

Для установки выполните следующие шаги:

  • Распакуйте поставочный архив во временную папку, доступную службе SQL Server.
  • Запустите среду управления SQL Server, например, бесплатную среду Microsoft SQL Server 2008 Management Studio Express (2005).
  • Откройте файл Install.sql в редакторе и укажите в нем путь к SqlMorpher.dll:
    CREATE ASSEMBLY Morpher
    FROM 'путь\SqlMorpher.dll'
    WITH PERMISSION_SET = SAFE;
    go
  • Выполните Install.sql.
    • Если при этом выдается сообщение об ошибке:
      Неправильный синтаксис около "EXTERNAL". Возможно, следует установить более высокий уровень совместимости для текущей базы данных, чтобы включить эту функцию. См. справку по параметру SET COMPATIBILITY_LEVEL инструкции ALTER DATABASE.
      То выполните команду:
      sp_dbcmptlevel 'название_БД', 90
      И запустите Install.sql еще раз.
    • Если вы получили сообщение Configuration option 'clr enabled' changed from 0 to 1. Run the RECONFIGURE statement to install, то перезапустите службу SQL Server и выполните Install.sql заново.
  • Ваш SQL Server к склонению готов! Проверяем:
    select dbo.Падеж ('Петров Пётр','Р')
  • Временную папку можно удалить.

Установка в SQL Azure

Просто выполните файл Install-Azure.sql, входящий в комплект поставки. В остальном работа с "Морфером" в SQL Azure ничем не отличается от работы в SQL Server.

Получение и установка обновлений

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

Процедура установки обновления:

  • Выполните файл Uninstall.sql из старого дистрибутива.
  • Следуйте инструкции по установке выше.

История изменений

Дата Версия  
  2.0.2 Исправлен баг с Полищук (жен).
  2.1.0 Добавлена функция ПолучитьФамилиюПротивоположногоПола.
  2.2.0 Добавлена функция Пропись.
30.09.2012 2.2.1 Учет аббревиатуры "и.о." (исполняющий обязанности), небольшое пополнение словаря.
  2.2.2 Исправлена ошибка 'CREATE ASSEMBLY failed because method is storing to a static field.'
25.07.2013 2.2.3 Учтены последние изменения в Morpher.dll для .NET
22.08.2013 2.2.4 Добавлена функция ОпределитьРод.
23.09.2013 2.2.5 Исправлена ошибка в прописи числа 0,2 в винительном падеже. Эта ошибка касалась только чисел 0,2, 0,002, 0,000002 и т.д. и проявлялась только в винительном падеже ("двух десятых" вместо "две десятых").
18.02.2014 2.3.0 Улучшено распознавание ФИО для составных имен. Теперь входное словосочетание признается ФИО, если хотя бы один из разделенных дефисом компонентов известен как имя. В результате стали правильно склоняться такие имена как ГЕЙ-ЛЮССАК Жозеф-Луи, Кени Шарль-Андре, Гильермо Гомес-Пенья и другие.
07.05.2014 2.3.1 Пополнение словаря.
12.07.2014 2.4.0 Добавлена поддержка SQL Server 2005. Ранее поддерживались только SQL Server 2008 и выше. Сборка теперь использует .NET 2.0 (раньше был .NET 3.5).
17.07.2014 2.4.1 Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005 (CREATE ASSEMBLY failed because method 'Проанализировать' on type 'Slepov.Russian.Morpher.СклонятельНарицательных' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies.). Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу СклонятельНарицательных. В SQL Server 2008 сборка предыдущей версии работала нормально.
21.07.2014 2.5.0 Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005 (CREATE ASSEMBLY failed because type 'Slepov.Russian.Morpher.Склонятель' in safe assembly 'SqlMorpher' has a static field 'CS$<>9__CachedAnonymousMethodDelegate12'. Attributes of static fields in safe assemblies must be marked readonly in Visual C#, ReadOnly in Visual Basic, or initonly in Visual C++ and intermediate language.). Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу Склонятель. В SQL Server 2008 сборка предыдущей версии работала нормально. Работоспособность сборки проверена в SQL Server 2005 SP4 и SQL Server 2008 R2.
17.08.2014 2.6.0 Исправлена ошибка в прописи чисел вида ... x1y abc, где x=1..9, y=1..4, abc - любые 3 цифры, а ... - любая последовательность цифр, в т.ч. нулевой длины. Пример числа: 311 000. Ошибка проявлялась только в родительном падеже (трёхсот одиннадцати ТЫСЯЧИ вместо трёхсот одиннадцати ТЫСЯЧ).
1.10.2014 2.6.1
  • Существенное пополнение словаря (более 7000 новых слов).
  • Сокращения зам. и зав. теперь не склоняются.
  • Функции теперь возвращают NULL, а не ошибку, если любой из обязательных параметров равен NULL.
15.03.2015 2.6.2 Исправлено склонение сокращения "И.о." (исполняющий обязанности), когда первая буква заглавная, например "И.о. директора".
15.04.2015 2.6.3 Пополнение словаря.
22.04.2015 2.6.4 Исправлена ошибка, возникавшая в MSSQL 2005 при регистрации сборки ( CREATE ASSEMBLY failed because method 'get_DecoratedLemma' on type 'Slepov.Russian.Morpher.MultiPartDecoratedWord' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies. ). В MSSQL 2008 ошибка не возникала.


 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2017. Перепечатка материалов сайта только с разрешения автора.