Как сгенерировать различные ФИО в SQL Server
Задача - получить множество случайных имен в SQL в виде Иван Иванович Иванов.
Используем следующую процедуру, где вы можете добавить свой список имен, фамилий и отчеств:
create or alter PROCEDURE [dbo].as_fioGenerator
@isWoman bit = 0,
@withF bit = 1,
@withI bit = 1,
@withO bit = 1
AS
BEGIN
declare @res nvarchar(max) = ''
declare @fm nvarchar(max) = 'Иванов,Петров,Сидоров,Комаров,Смирнов,Сергеев,Никитин,Абрамов,Ильин,Лавров,Зеленин'
declare @im nvarchar(256) = 'Кирилл,Евгений,Семен'
declare @om nvarchar(256) = 'Петрович,Анатольевич,Дмитриевич,Иванович,Сергеевич,Павлович,Ильич,Михайлович'
declare @fw nvarchar(max) = 'Иванова,Петрова,Сидорова,Комарова,Смирнова,Сергеева,Никитина,Абрамова,Ильина,Лаврова,Зеленина'
declare @iw nvarchar(256) = 'Ольга,Ирина,Яна,Жанна,Наталья,Марина,Мария,Елизавета,Евгения,Ксения,Оксана'
declare @ow nvarchar(256) = 'Петровна,Анатольевна,Дмитриевна,Ивановна,Сергеевна,Павловна,Михайловна'
declare @f nvarchar(max) = iif(@isWoman=1, @fw, @fm)
declare @i nvarchar(max) = iif(@isWoman=1, @iw, @im)
declare @o nvarchar(max) = iif(@isWoman=1, @ow, @om)
if(@withF=1) begin
set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@f,',') order by newid())
end
if(@withI=1) begin
set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@i,',') order by newid())
end
if(@withO=1) begin
set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@o,',') order by newid())
end
select @res
END
Функция SPLIT (разбивает строку с разделителями на таблицу):
CREATE OR ALTER FUNCTION [dbo].[split] ( @stringToSplit NVARCHAR(MAX), @char NVarCHAR)
RETURNS
@returnList TABLE ([value] [nvarchar] (max), num int)
AS
BEGIN
Declare @r1 TABLE ([value] [nvarchar] (max), num int)
DECLARE @name NVARCHAR(max)
DECLARE @pos INT
declare @index int = 1
WHILE CHARINDEX(@char, @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(@char, @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @r1
SELECT @name, @index
set @index = @index + 1
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @r1
SELECT @stringToSplit, @index
insert into @returnList
select [Value], num from @r1 order by num
RETURN
END
Использование:
exec [dbo].as_fioGenerator - мужские ФИО
exec [dbo].as_fioGenerator @isWoman = 1 - женские ФИО
exec [dbo].as_fioGenerator @isWoman = 1, @withF = 1, @withI = 1, @withO = 0 - женские Фамилия и Имя
exec [dbo].as_fioGenerator @isWoman = 0, @withF = 0, @withI = 1, @withO = 0 - мужские Имена
Что еще посмотреть по SQL Server
Скрипт бекапа базы и восстановления из бекапа
SQL запрос для получения всех текущих выполняющихся запросов на базе
Запрос для поиска проблемных SQL по процессору
Как сделать поиск по всем таблицам базы данных SQL Server
Поиск строки во всех хранимых процедурах SQL Server
Как писать запросы с колонкой по временным интервалам (неделя, месяц, квартал, год)
Разработчик SQL, нужны клиенты и заказы?
Прямые заказы от клиентов. Нужно знать только SQL и HTML
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта