Хм ... попробуйте что-то вроде этого перед сохранением:
SELECT TOP 1 name FROM widgets WHERE name=@newname OR name LIKE (@newname + ' [0-9]' ORDER BY name DESC
Это даст вам «последнее использованное» имя.
- Если результат равен нулю, столкновения нет.
- Если результат совпадает с @newname, добавьте "2"
- Если в результате получится что-то еще, нарежьте @newname и пробел в начале, преобразуйте в целое число и увеличьте.
Конечно, это будет охватывать вас только для 9 дубликатов, или всего 10 экземпляров данного имени. Чтобы использовать этот подход для большего, вам нужно всегда использовать двузначный суффикс (02, 03 и т. Д.) И изменить предложение LIKE для соответствия.
(Вы не указали СУБД, поэтому она написана для Microsoft SQL Server, но в IIRC синтаксис подстановочного знака LIKE аналогичен другим.)