Hola, chicos,
Buen día.

En esta publicación comentaré brevemente una función UDF (Función definida por el usuario) que solía usar para eliminar acentos y caracteres especiales de una cadena en SQL Server.

Quitar acentos

Hay varias formas de hacer esto, como usar una UDF para hacer este trabajo, una función SQLCLR o la que yo prefiero que es usar COLLATION.

Usando una función UDF

CREATE FUNCTION [dbo].[fncRemove_Acentuacao2](
    @String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
    
    /****************************************************************************************************************/
    /** RETIRA ACENTUAÇÃO DAS VOGAIS **/
    /****************************************************************************************************************/
    SET @String = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,'á','a'),'à','a'),'â','a'),'ã','a'),'ä','a')
    SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'é','e'),'è','e'),'ê','e'),'ë','e')
    SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'í','i'),'ì','i'),'î','i'),'ï','i')
    SET @String = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,'ó','o'),'ò','o'),'ô','o'),'õ','o'),'ö','o')
    SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'ú','u'),'ù','u'),'û','u'),'ü','u')
    
    /****************************************************************************************************************/
    /** RETIRA ACENTUAÇÃO DAS CONSOANTES **/
    /****************************************************************************************************************/
    SET @String = REPLACE(@String,'ý','y')
    SET @String = REPLACE(@String,'ñ','n')
    SET @String = REPLACE(@String,'ç','c')
    
    RETURN UPPER(@String)

END
GO

SQL Server - Remove acentuação 2
SQL Server - Eliminar acentuación 2

Usando una función SQLCLR

using System.Text;
using System.Data.SqlTypes;
using System.Globalization;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString fncRemove_Acentuacao(SqlString Ds_Texto)
    {

        if (Ds_Texto.IsNull)
            return null;

        var s = Ds_Texto.Value.Normalize(NormalizationForm.FormD);
        var sb = new StringBuilder();

        foreach (var t in s)
        {
            var uc = CharUnicodeInfo.GetUnicodeCategory(t);
            if (uc != UnicodeCategory.NonSpacingMark)
            {
                sb.Append(t);
            }
        }

        return sb.ToString();

    }
};

SQL Server - Remove acentuação - SQL CLR
SQL Server - Eliminar acentuación - SQL CLR

Usando la intercalación
En mi opinión, esta es la mejor manera de eliminar la acentuación de una cadena en SQL Server. Es la forma más rápida de hacerlo y es nativa de la propia base de datos (es decir, universal, funciona en cualquier base de datos SQL Server).

SQL Server - Remove acentuação - Collate
SQL Server - Quitar acentuación - Clasificar

Para conocer todos los tipos de COLLATION, puede ejecutar el siguiente comando:

select name, description
from ::fn_helpcollations() 
where name like 'SQL_Latin%'
AND NAME NOT LIKE '%1254%'

Eliminar caracteres especiales

Usando la siguiente función, puede eliminar esos caracteres especiales de una cadena y devolver solo los caracteres alfanuméricos.

CREATE FUNCTION [dbo].[fncRemove_Caracteres_Especiais](
    @String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN

    
    DECLARE 
        @Result VARCHAR(MAX), 
        @StartingIndex INT = 0
    
    
    WHILE (1 = 1)
    BEGIN 
        
        SET @StartingIndex = PATINDEX('%[^a-Z|0-9|^ ]%',@String) 
        
        IF (@StartingIndex <> 0)
            SET @String = REPLACE(@String,SUBSTRING(@String, @StartingIndex,1),'') 
        ELSE 
            BREAK

    END	
    
    SET @Result = REPLACE(@String,'|','')
    
    RETURN @Result

END
GO

SQL Server - Remover caracteres especiais - UDF
SQL Server - Eliminar caracteres especiales - UDF

¡Eso es todo, amigos!
Hasta la próxima.