Por uma necessidade de regra de negócio ou para exportar dados para outras fontes de dados, as vezes precisamos tirar
acento dos caracteres de certas colunas ou expressões que são manipuladas no SQL SERVER.

Existem várias formas para resolver esses casos. Podemos criar uma procedure ou função com uma estrutura do tipo DE/PARA e
desenvolver um código que captura a informação passada como parâmetro, lêr cada caracter dessa
expressão e efetuar a troca de acordo com a estrutura DE/PARA. O processo nesse caso, consiste em fazer a troca de um
caracter acentuado por outro caracter sem o acento.
 
A proposta desse artigo é mostra a utilização do comando COLLATE para fazer a troca dos caracteres acentuados.
 
Veja o exemplo:

/*--*/
set nocount on
Declare @cExpressao varchar(60)
Set @cExpressao = ''áéíóúàèìòùâêîôûãõäëïöüçñÿýÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕÄËÏÖÜÇÑŸÝ''
Select @cExpressao
Select @cExpressao collate sql_latin1_general_cp1251_ci_as
/*--*/

Podemos criar uma função que contém a regra acima, conforme exemplo abaixo:

/*--*/
Create Function fnTiraAcento (@cExpressao varchar(100))
Returns varchar(100)
as
Begin
   Declare @cRetorno varchar(100)
  
   Set @cRetorno = @cExpressao collate sql_latin1_general_cp1251_cs_as
  
   Return @cRetorno
  
End
/*--*/

Executando a Função.

/*--*/
Declare @cExpressao varchar(60)

Set @cExpressao = ''áéíóúàìòùâêîôûãõäëïöüçñÿýÁÉÍÓÚÀÌÒÙÂÊÎÔÛÃÕÄËÏÖÜÇÑŸÝ''

Select dbo.fnTiraAcento( @cExpressao )

----------------------------
AEIOUAEIOUAEIOOAEIOUAOAEIOUC

(1 row(s) affected)


/*--*/


Se voce tem informações com caracteres especiais em uma coluna do tipo nchar e nvarchar,
voce deve passar os dados para um tipo char e varchar. Exemplo:

-- Não efetua a conversão 
Declare @cExpressao nvarchar(30)
Set @cExpressao = ''aeiouáéíóúàèìòòâêîôûãõäëïöüç''
Select @cExpressao collate sql_latin1_general_cp1251_ci_as
------------------------------
aeiouáéíóúàèìòòâêîôûãõäëïöüç
(1 row(s) affected)

Não ocorreu a troca dos acentos. Fazendo a conversão implícita do tipo unicode, voce consegue fazer a troca dos acentos.

Declare @cExpressao nvarchar(30)
Declare @cExpr varchar(30)
Set @cExpressao = ''aeiouáéíóúàèìòòâêîôûãõäëïöüç''
Set @cExpr = @cExpressao
Select @cExpr collate sql_latin1_general_cp1251_ci_as
------------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected)

Utilizando a função criada no exemplo anterior, não temos a necessidade de fazer a conversão.
Como o parametro da função não é do tipo unicode, no momento da passagem a expressão caracter, ocorre a conversão implícita.

Declare @cExpressao nvarchar(30)
Set @cExpressao = ''aeiouáéíóúàèìòòâêîôûãõäëïöüç''
Select dbo.fnTiraAcento( @cExpressao )
----------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected) 

Collate utilizado nesse exemplo (sql_latin1_general_cp1251_cs_as) foi escolhido entre 315 ''collates''
existente no SQL SERVER que fizeram a conversão dos conjuntos de caracteres acima.

A relação de collate é obtida atraves de função ::fn_helpcollations()

select * from ::fn_helpcollations()
where name = ''sql_latin1_general_cp1251_cs_as''

Para maiores detalhes sobre COLLATE, consulte o BOL do SQLServer