Хранимая процедура SQL Server для генерации кода на основе имени и фамилии

Я новичок в хранимых процедурах SQL Server. Мне было интересно, как написать эту хранимую процедуру. Сценарий такой:

Процедура принимает имя и фамилию в качестве параметров, на основе этого она берет первую букву или имя и первую букву фамилии, добавляет в конец число и возвращает эту строку. Если строка уже существует в базе данных, она увеличит число и вернет строку.

Пример 1:

firstname: abc    
lastname: def    
output: ad001

Пример 2:

firstname: pqr    
lastname: mno    
output: pm001

Пример 3:

firstname: aaa    
lastname: ddd
output: ad002 

(в этом случае вывод будет ad002 вместо 001, поскольку значение ad001 уже существует в базе данных, созданной в примере 1)

Любая помощь с этой проблемой будет оценена. Спасибо.


person Rahul    schedule 03.05.2013    source источник


Ответы (1)


(Обновление)
Вы можете использовать эту логику в своей процедуре:

Declare
   @firstname varchar(10)= 'aaa',    
   @lastname varchar(10)=  'ddd',
   @output varchar(20)

insert into name_table 
   select 
      @firstname, 
      @lastname,
      substring(@firstname,1,1)+
      substring(@lastname,1,1)
      +RIGHT('000'+cast(COALESCE(max(substring(output,3,4)),0)+1 as varchar) ,4)
   from 
      name_table 
   where 
      output like substring(@firstname, 1, 1) + substring(@lastname, 1, 1) + '%'


select * from name_table

SQL Fiddle

person Ravi Singh    schedule 03.05.2013
comment
Часть, где генерируется следующий номер, имеет проблемы. Что будет, если последним номером окажется 0009? Очевидно, ваш код будет выдавать 00010 вместо 0010. А что делать, если для конкретной комбинации букв еще нет записи? В вашем запросе MAX () в этом случае будет оцениваться как NULL, а так будет результат все выражение. - person Andriy M; 03.05.2013