Declare @YourTable table (ID int,Name varchar(50))
Insert Into @YourTable values
(1,'JOHN DOE'),
(2,'JOHN JANE-DOE'),
(3,'JOHN-JANE DOE'),
(4,''),
(5,'JOHN'),
(6,'PATTY O''BRIAN'),
(7,'OLD MCDONALD')
Declare @Str varchar(max) = (Select ID,Name=Lower(Name) from @YourTable for XML Raw)
Select @Str = Replace(@Str,MapFrom,MapTo)
From (
Select MapFrom=P+C
,MapTo =Upper(P+C)
From (Select * From (Values ('"'),(' '),('-'),(' O'''),(' Mc')) P (P)) A
Cross Join (Select Top 26 C=Char(96+Row_Number() Over (Order By Number)) From master..spt_values) C
Union All
Select * From (Values (' MC',' Mc')) P (MapFrom,MapTo)
) A
Declare @XML xml = cast(@Str as XML)
Select ID = r.value('@ID','int')
,Name = r.value('@Name','varchar(50)')
From @XML.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
Where attr.value('local-name(.)','varchar(100)') not in ('ID','Active')
戻り
ID Name
1 John Doe
2 John Jane-Doe
3 John-Jane Doe
4
5 John
6 Patty O'Brian
7 Old McDonald
データベースに適切な権限がない場合は、アプリケーション側でこれを行う必要があります。 –
データベースレイヤーでこれを行うことは賢明な考えだったとしても、あなたが求めているものの複雑さを理解してもらいたいですか?適切な大文字小文字の名前は、「最初の文字を大文字にする」ほど簡単ではありません。 「オニール」や「マクドナルド」などの名前はうまく再生されません。 – iamdave
あなたが適切なパーミッションを取得しても、SQL以外のものでこれをやりたいと思うかもしれません - 純粋なT-SQLを使用するソリューションがありますが、パフォーマンスはあまり良くありません。 SQL文の代わりに呼び出されるSSISパッケージを作成することも考えられます。 –