************* ПРЕДУПРЕЖДЕНИЕ ******************** НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД В ПРОИЗВОДСТВЕ Это следует рассматривать как простойупражнение, чтобы продемонстрировать, как можно добиться рекурсивного обновления.С объемами он будет работать плохо
Что касается попытки сделать использование заглавных букв в словах, то оно также довольно плохое, поскольку в заглавных буквах слишком много правил, зависящих от локали, языковых правил и обычаев.
В SQLНа сервере нет простого способа сделать это без использования функции CLR ************* ПРЕДУПРЕЖДЕНИЕ ********************
If Object_Id('tempdb..#abc','U') is not null
Drop table #abc
Go
Create Table #abc
(
Strng varchar(max)
)
GO
Insert #abc
Select 'shakuntala'
Union All
Select 'shakuntala-anjna'
Union All
Select 'shakuntala-anjna-sharat'
GO
If Object_Id('tempdb..#def','U') is not null
Drop table #def
Go
Create Table #def
(
Strng varchar(max),
Initcap varchar(max)
)
GO
Insert #def
Select 'shakuntala', 'Shakuntala'
Union All
Select 'shakuntala-anjna','Anjna'
Union ALl
Select 'shakuntala-anjna','Shakuntala'
Union All
Select 'shakuntala-anjna-sharat', 'Anjna'
Union ALl
Select 'shakuntala-anjna-sharat', 'Shakuntala'
Union ALl
Select 'shakuntala-anjna-sharat', 'Sharat'
go
select *
from #abc a
while @@RowCount > 0
begin
update a
set a.Strng = replace(a.Strng, d.Initcap, d.Initcap)
from #abc a
inner join #def d
on d.Strng = a.Strng
and a.Strng not like '%' + d.Initcap + '%' collate Latin1_General_100_CS_AS
end
select *
from #abc a
Приведенный выше код дает желаемый результат