No se si esta solución es la más eficiente, pero me parece que es correcta y no hace falta crear nuevos objetos.
Los datos:
Código SQL:
Ver originalCREATE TABLE #T(CAMPO1 VARCHAR(MAX));
INSERT
INTO #T
VALUES ('información sobre EVENTOS todos los dias'),
('navidades FUERA del pueblo.'),
('fiesta para TODO el mundo');
La recuperación recursiva:
Código SQL:
Ver originalWITH T AS
(SELECT *,
(SELECT Iif(Ascii(SUBSTRING(CAMPO1,1,1)) BETWEEN 65 AND 90,CAMPO1,Stuff(CAMPO1,1,1,'#'))) NuevoCAMPO1
FROM (SELECT 1 N,
CAMPO1
FROM #T) T
UNION ALL
SELECT N+1,
CAMPO1,
(SELECT Iif(Ascii(SUBSTRING(NuevoCAMPO1,N+1,1)) BETWEEN 65 AND 90,NuevoCAMPO1,Stuff(NuevoCAMPO1,T.N+1,1,'#'))) NuevoCAMPO1
FROM T
WHERE N+1<=Len(CAMPO1))
SELECT *,
REPLACE(NuevoCAMPO1,'#','') NuevoCAMPO
FROM T
WHERE N=Len(NuevoCAMPO1);
Si entre las mayusculas hay caracteres especiales tales como Á o Ñ, hay que añadir sus valores (ascii) a las condiciones.