morpher.ru +7 (925) 336 9960
nowhere@morpher.ru
 
 
Мой Морфер

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

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

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

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

  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017

Функции склонения

Самый простой сценарий использования модуля - это вызов функций склонения по падежам. Названия функций соответствуют названиям падежей русского языка:

        
            SELECT dbo.Именительный (N'город Москва') -- город Москва
            SELECT dbo.Родительный (N'город Москва') -- города Москвы
            SELECT dbo.Дательный (N'город Москва') -- городу Москве
            SELECT dbo.Винительный (N'город Москва') -- город Москву
            SELECT dbo.Творительный (N'город Москва') -- городом Москвой
            SELECT dbo.Предложный (N'город Москва') -- городе Москве
            SELECT dbo.ПредложныйО (N'город Москва') -- о городе Москве
        
    

Также модуль предоставляет функции склонения исходной строки, отвечающие на вопросы:

        
            SELECT dbo.Где (N'город Москва') -- в городе Москве
            SELECT dbo.Куда (N'город Москва') -- в город Москву
            SELECT dbo.Откуда (N'город Москва') -- из города Москвы
        
    

Все функции модуля принимают и возвращают строковые параметры как SQL тип данных nvarchar. Таким образом при задании строковых литералов необходимо указывать букву N перед открывающей строку кавычкой.

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

Функция Падеж является более общим и расширенным вариантом склонения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        
            SELECT dbo.ОпределитьРод (N'Евгений') -- Мужской
            SELECT dbo.ОпределитьРод (N'Евгения') -- Женский
            SELECT dbo.ОпределитьРод (N'окно') -- Средний
            SELECT dbo.ОпределитьРод (N'часы') -- Множественное число
            SELECT dbo.ОпределитьРод (N'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 — пример вывода суммы прописью с помощью функции модуля Пропись.

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

  • Распакуйте поставочный архив во временную папку, доступную службе SQL Server.
  • Запустите Microsoft SQL Server Management Studio.
  • Подключитесь к нужной базе.
  • В новом окне редактора (Ctrl-N) выполните команду:
                    
                        EXEC sp_configure 'clr enabled', 1;
                        RECONFIGURE;  
                        GO 
                    
                
  • Откройте файл Install.sql в редакторе и укажите в нем путь к SqlMorpher.dll:
                    
                        CREATE ASSEMBLY SqlMorpher
                        FROM 'путь\SqlMorpher.dll'
                        WITH PERMISSION_SET = SAFE;
                        go
                    
                
  • Выполните Install.sql.
    • Если при этом выдается сообщение об ошибке:
                              
                                  Неправильный синтаксис около "EXTERNAL". Возможно, следует установить более 
                                  высокий уровень совместимости для текущей базы данных, чтобы включить эту функцию. 
                                  См. справку по параметру SET COMPATIBILITY_LEVEL инструкции ALTER DATABASE.
                              
                          
      То выполните команду:
                              
                                  sp_dbcmptlevel 'название_БД', 90
                              
                          
      И запустите Install.sql еще раз.
  • Добавьте лицензионный ключ в таблицу dbo.MorpherLicense, которую создал Install.sql:
                    
                        INSERT INTO dbo.MorpherLicense ([Key]) VALUES (N'MRK1.…');
                    
                
  • Ваш SQL Server к склонению готов! Проверяем:
                    
                        SELECT dbo.Падеж (N'Петров Пётр', N'Р', null);
                    
                
  • Временную папку можно удалить.

Лицензионный ключ

Для работы модуля необходим лицензионный ключ — строка вида MRK1.…, в которой записаны лицензиат, дата начала и дата окончания лицензии. Ключ хранится в таблице dbo.MorpherLicense (одно поле [Key]), которую создает Install.sql. В таблице должна быть одна строка с ключом:

        
            INSERT INTO dbo.MorpherLicense ([Key]) VALUES (N'MRK1.…');
        
    

Пока ключа в таблице нет, функции модуля выдают ошибку «Лицензионный ключ не найден». Такую же ошибку вы получите, если ключ неправильный, выдан для другого продукта или срок лицензии истёк.

Каждый покупатель получает свой собственный уникальный ключ. Ключ действует до даты окончания лицензии и подходит ко всем версиям модуля, выпущенным до этой даты (версия 2.7.0 и новее; для более старых версий нужны ключи прежнего формата). При продлении лицензии вы получаете новый ключ. Чтобы заменить ключ, обновите строку в таблице:

        
            UPDATE dbo.MorpherLicense SET [Key] = N'MRK1.…';
        
    

Модуль читает ключ один раз, при первом вызове его функции, поэтому после замены ключа перезагрузите сборку (ALTER ASSEMBLY SqlMorpher FROM 'путь\SqlMorpher.dll') или перезапустите SQL Server. Переустанавливать модуль не нужно.

Сведения о лицензии возвращает функция dbo.Лицензия (без параметров):

        
            SELECT dbo.Лицензия ();
        
    

Она возвращает строку с описанием лицензии: продукт, тариф, срок действия и лицензиат.

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

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

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

  • Выполните файл Uninstall.sql из старого дистрибутива. Он удаляет в том числе таблицу dbo.MorpherLicense, поэтому сохраните ваш ключ заранее.
  • Следуйте инструкции по установке выше, включая добавление лицензионного ключа.

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

Дата Версия  
01.11.2026 2.7.0
  • Улучшено склонение:
    • Перечисления: «Сырьё и материалы» → «Сырья и материалов», «Спорт и развлечения» → «Спорта и развлечений», «Одежда, обувь, аксессуары» → «Одежды, обуви, аксессуаров» (раньше последнее слово оставалось в именительном падеже).
    • Названия товаров: прилагательные в конце теперь склоняются: «Йогурт Северная Долина вишнёвый» → «Йогурта Северная Долина вишнёвого», «Мороженое Зимний Вальс сливочное» → «Мороженого Зимний Вальс сливочного».
    • Географические названия:
      • У названий с дефисом теперь склоняется только последняя часть: «Ричмонд-парк» → «в Ричмонд-парке», «Блэкпул-Тауэр» → «в Блэкпул-Тауэре» (раньше «в Ричмонде-парке», «в Блэкпуле-Тауэре»). Названия с английскими предлогами и слова «Кросс», «Бридж» не склоняются: «Стратфорд-апон-Эйвон», «Кингс-Кросс». «Марий Эл» не склоняется (раньше «Мария Эл»).
      • Выбор предлога: «на Южном Урале» (регион), но «в Новом Урале» (город); «на Исаакиевском озере», но «в Исаакиевском Озере» (одноименный поселок); «на Бейкер-стрит», «на Юнион-сквер», «на Эбби Роуд», но «в Красной Поляне» (раньше «на»). Предлог «на» для островов, атоллов и архипелагов: «на Мадейре», «на Кэт Айленде», «на атолле Джонстон», «на Южной Суматре».
      • Отработан список из 620 географических названий, присланный пользователем temi4 ( uservoice/issues/27): 613 из 620 названий склоняются правильно, например «в Тоттори», «в Араукании», «в Касабланка-Сете», «в Мадхья-Прадеше». Составные иностранные названия: первая часть больше не склоняется там, где не должна («в Альта-Верапасе», «в Гранд-Ансе», «в Аш-Шати»); название с несклоняемой последней частью не склоняется целиком («в Моен-Огове», «в Пхёнан-Намдо»). Хорватские жупании склоняются правильно: «в Загребской жупании». Названия мест больше не склоняются как одушевлённые: винительный «Сен-Джон», «Эш-Шамаль».
      • Местный падеж на «-у» в названиях с «Бор» и «Порт»: «в Сосновом Бору», «в Мясном Бору», «в Железном Порту» (спасибо пользователю hisbvdis, приславшему комментарий).
    • Составные и иностранные фамилии: «Семёнова-Тян-Шанского» (раньше «Тяна-Шанского»), «Хосе Ортеги-и-Гассета» (раньше «Ортега-и-Гассета»), «Сергеем Брином» (раньше «Бриным»), «Леди Гаги» (раньше «Леди Гага»).
    • Фамилии, совпадающие с названиями городов (Пушкин, Горький, Жуковский, Мышкин, Жуков, Ломоносов, Брежнев, Королёв, Серов, Самойлов, Быков): одиночное слово теперь склоняется как фамилия — «Пушкина» в винительном падеже, «Пушкиным» в творительном (раньше «Пушкин» и «Пушкином»). Киров и Куйбышев по-прежнему склоняются как города. Если нужен город или нарицательное слово, передайте в функцию Падеж признак НАР; если нужна фамилия — признак ФИО. В контексте («город Пушкин», «улица Горького», «Пушкин Александр») склонение правильное, как и раньше.
    • Китайские имена: фамилия не меняется, мужское имя склоняется: «Дэн Сяопин» → «Дэн Сяопина» (раньше «Дэна Сяопина»), «Цзян Цзэминь» → «Цзян Цзэминя» (раньше «Цзяна Цзэминя»), «Чжоу Эньлай» → «Чжоу Эньлая» (раньше «Чжоуа Эньлая»), «председатель Си Цзиньпин» → «председателя Си Цзиньпина». «Обрусевшие» фамилии склоняются как обычно: «Виктор Ван» → «Виктора Вана», «Татьяна Ким» → «Татьяны Ким». Вьетнамские и корейские имена из трёх частей: склоняется только последняя («Ким Чен Ира», «Фам Ван Донга»).
    • Фамилия Романец склоняется как «Романцом» (раньше «Романцем») (спасибо пользователю Yuri Byshko, приславшему комментарий). Мужское имя Алмаз теперь склоняется («Хасанова Алмаза Ильдаровича»), женское — нет.
    • Сокращения и должности: «Гл. инженер» → «Гл. инженера», «Ст. кладовщик» → «Ст. кладовщика», «Ген. директор» → «Ген. директора» (раньше «Гена. директор»); составные должности типа «Митрополита Калужского и Боровского»; «Совет Министров» → «Совета Министров» (раньше «Министрова»).
    • Слово «Модель», употреблённое отдельно, склоняется как обычное существительное («Модели»), а не как фамилия.
    • Во фразе «Директор ООО "Стратегия Фарма" - Управляющей компании ООО "Фармкопилка"» программа больше не пытается склонять слово «Управляющей».
    • Мягкие переносы (U+00AD) во входной строке сохраняются в результате и не мешают склонению (раньше перенос терялся).
    • Учет казахских букв при склонении на русском языке: в Казахстане типична ситуация, когда ФИО на казахском вставляется в документ на русском, и склонение ожидается по правилам русского языка. Например, Әбіш Кекілбаев должен превратиться в Әбіша Кекілбаева.
    • Исправлено склонение: фамилий Курячий, Бова, Андрусейко, Кузьмина́ (в сочетаниях «Кузьмина Ирина», «Кузьмина К. Э.»), Якушенок, Дыкань; топонимов «Марьина Роща», Айн-Темушент; армянского женского имени Аревик; имени «Хайсам бен Тарек Аль Саид» и подобных; слова «принт-менеджер»; аббревиатур УМВД, УФПС (не склоняется), ГУЗ, ТФОМС и др.; фраз «ПРЕДСЕДАТЕЛЬ СОВЕТА ДЕПУТАТОВ», «МИНИСТР ФИНАНСОВ ПЕРМСКОГО КРАЯ», «ул. Ленина», «ул. Пушкина»; фразы «Пашкевич С.» с признаком ЖЕН; наречий (например, «технически перевооружаемый»); фраз с несколькими закавыченными словами; длинных фраз, набранных заглавными буквами.
    • В сочетании «во многом» предлог «во», а не «в». Предлоги «на» и «для» больше не склоняются (раньше «для» иногда склонялось как «тля»).
    • В словарь добавлены названия растений: газания, дугласия, сансевиерия и др.
  • Найдены и исправлены ошибки:
    • dbo.Пропись(-2147483648, …) (наименьшее значение int) приводила к переполнению стека и аварийному завершению процесса.
    • dbo.Пропись с отрицательным числом и пустой или неопознанной единицей измерения возвращала строку «минус »; для положительных чисел в этом случае возвращался NULL. Теперь возвращается NULL.
  • Объём работы по разбору одной фразы ограничен. Если фраза слишком сложная (порядка 50 слов и более), функции склонения возвращают пустую строку. Это оставляет злоумышленникам меньше шансов «подвесить» запрос.
  • Словарь модуля значительно пополнен (Викисловарь, odict.ru): с прошлой версии добавлены тысячи слов, в основном фамилии и географические названия.
  • Изменен формат лицензионного ключа: теперь это строка вида MRK1.…, в которой записаны лицензиат, дата начала и дата окончания лицензии. При переходе на эту версию вам понадобится новый ключ. Ключ подходит ко всем версиям модуля, выпущенным до окончания его срока. Чтобы продлить лицензию, теперь достаточно заменить ключ, замена модуля не нужна.
    • Ключ хранится в таблице dbo.MorpherLicense, которая создается скриптом Install.sql.
    • Добавлена функция dbo.Лицензия со сведениями о лицензии.
03.11.2021 2.6.10
  • Склонение имен Аслан-бек, Джалил-бек и подобных
  • 266 новых слов из odict.ru
  • Склонение топонима «Красный боец»
  • Предлог «на» для сокращения «ул»: «на ул. Фрунзе», «на Тенистой ул.»
  • Предлог «на» для слов перевал, застава и др.
  • «Член правления», «доставка, демонтаж и монтаж»
26.04.2021 2.6.9
  • Добавлено 25 тысяч слов из русского Викисловаря.
  • Добавлено более 14600 новых слов (новое издание словаря Зализняка + пополнение словаря odict.ru).
  • Добавлено 752 фамилии из Википедии.
  • Функция Пропись теперь считает единицы измерения нарицательными.
  • Улучшено склонение несловарных ФИО, а также фамилий с дефисом (Тер-Оганесян, Кул-Мухаммед)
  • Функция склонения больше не заменяет латинские буквы на русские.
  • Исправлено склонение Шугыла Нурсабикызы и подобных (где -кызы пишется слитно).
  • Исправлено склонение нестандартной фамилии Василив.
  • Исправлено склонение нестандартного топонима Уторгош, который склоняется и по мужскому, и по женскому типу: Малая Уторгош и Малый Уторгош.
  • Орёл теперь склоняется как неодушевленное (название города).
  • Исправлено склонение Илон Маск, контакт-центр.
  • Исправлено склонение смартфон samsung galaxy j3 sm-j330f ds черный.
  • Исправлено склонение Смартфон Apple iPhone 11 Pro Max 256GB Midnight Green (MWHM2RU/A).
03.07.2020 2.6.6
  • Исправлено склонение ряда женских имен Ближнего Востока: Алмаз, Анушик, Алтнат и др.
  • Исправлено склонение отдельных словосочетаний: Кива Владимир, Кабинет Министров, мешок.
  • Теперь не склоняются слова в кавычках: Сторожевой корабль «Сметливый».
  • Добавлено более 300 новых слов.
15.04.2019 2.6.5 Актуализирована кодовая база и произведено пополнение словаря. Исправлена процедура установки. Исправлен ряд отдельных ошибок: пропись слова год в винительном падеже при n=1, склонение словосочетаний и сокращений, склонение узбекской денежной единицы тийин, склонение словосочетаний вида город Москва. Корректно обрабатываются наречия: отдельно ("отдельно стоящее здание"), слегка, почти, совершенно.
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 ошибка не возникала.
15.04.2015 2.6.3 Пополнение словаря.
15.03.2015 2.6.2 Исправлено склонение сокращения "И.о." (исполняющий обязанности), когда первая буква заглавная, например "И.о. директора".
1.10.2014 2.6.1
  • Существенное пополнение словаря (более 7000 новых слов).
  • Сокращения зам. и зав. теперь не склоняются.
  • Функции теперь возвращают NULL, а не ошибку, если любой из обязательных параметров равен NULL.
17.08.2014 2.6.0 Исправлена ошибка в прописи чисел вида ... x1y abc, где x=1..9, y=1..4, abc - любые 3 цифры, а ... - любая последовательность цифр, в т.ч. нулевой длины. Пример числа: 311 000. Ошибка проявлялась только в родительном падеже (трёхсот одиннадцати ТЫСЯЧИ вместо трёхсот одиннадцати ТЫСЯЧ).
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.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 сборка предыдущей версии работала нормально.
12.07.2014 2.4.0 Добавлена поддержка SQL Server 2005. Ранее поддерживались только SQL Server 2008 и выше. Сборка теперь использует .NET 2.0 (раньше был .NET 3.5).
07.05.2014 2.3.1 Пополнение словаря.
18.02.2014 2.3.0 Улучшено распознавание ФИО для составных имен. Теперь входное словосочетание признается ФИО, если хотя бы один из разделенных дефисом компонентов известен как имя. В результате стали правильно склоняться такие имена как ГЕЙ-ЛЮССАК Жозеф-Луи, Кени Шарль-Андре, Гильермо Гомес-Пенья и другие.
23.09.2013 2.2.5 Исправлена ошибка в прописи числа 0,2 в винительном падеже. Эта ошибка касалась только чисел 0,2, 0,002, 0,000002 и т.д. и проявлялась только в винительном падеже ("двух десятых" вместо "две десятых").
22.08.2013 2.2.4 Добавлена функция ОпределитьРод.
25.07.2013 2.2.3 Учтены последние изменения в Morpher.dll для .NET
  2.2.2 Исправлена ошибка 'CREATE ASSEMBLY failed because method is storing to a static field.'
30.09.2012 2.2.1 Учет аббревиатуры "и.о." (исполняющий обязанности), небольшое пополнение словаря.
  2.2.0 Добавлена функция Пропись.
  2.1.0 Добавлена функция ПолучитьФамилиюПротивоположногоПола.
  2.0.2 Исправлен баг с Полищук (жен).


 

Библиотеки

© Сергей Слепов, 2003 - 2026.