APDSJ!
Função (store function) para remover acentos em SQL Server 2005, SQL Server 2008 e SQL Server 2012.
Funciona para maiúsculas e minúsculas e com banco de dados em latin1, mas pode ser adaptada facilmente para outro encoding.
Espero ter ajudado!
IF EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[usf_rm_accent_pt_latin1]')
AND type IN (N'FN')
)
DROP FUNCTION usf_rm_accent_pt_latin1;
GO
CREATE FUNCTION usf_rm_accent_pt_latin1 (@txt varchar(max)) RETURNS varchar(max)
-- Nome Artefato/Programa..: usf_rm_accent_pt_latin1.sql
-- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com)
-- Data Inicio ............: 26/11/2011
-- Data Atualizacao........: 08/10/2012
-- Versao..................: 0.03
-- Compilador/Interpretador: T-SQL (Transact SQL)
-- Sistemas Operacionais...: Windows
-- SGBD....................: MS SQL Server 2005/2008/2012
-- Kernel..................: Nao informado!
-- Finalidade..............: store function para remover acentos maiúsculos e minúsculos em latin1 pt
-- OBS.....................: só funciona para banco configurado com o collate latin1, para saber qual o collate do seu banco execute essa query
-- ........................: SELECT DatabasePropertyEx(db_name(),'Collation');
--
BEGIN
DECLARE @txt0 varchar(max)
--caixa baixa
SET @txt0 = replace(@txt COLLATE Latin1_General_BIN, char(225),'a') --SELECT 'á',ASCII('á'); --225
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(224),'a') --SELECT 'à',ASCII('à'); --224
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(227),'a') --SELECT 'ã',ASCII('ã'); --227
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(226),'a') --SELECT 'â',ASCII('â'); --226
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(233),'e') --SELECT 'é',ASCII('é'); --233
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(232),'e') --SELECT 'è',ASCII('è'); --232
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(234),'e') --SELECT 'ê',ASCII('ê'); --234
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(237),'i') --SELECT 'í',ASCII('í'); --237
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(236),'i') --SELECT 'ì',ASCII('ì'); --236
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(238),'i') --SELECT 'î',ASCII('î'); --238
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(243),'o') --SELECT 'ó',ASCII('ó'); --243
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(242),'o') --SELECT 'ò',ASCII('ò'); --242
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(244),'o') --SELECT 'ô',ASCII('ô'); --244
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(245),'o') --SELECT 'õ',ASCII('õ'); --245
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(250),'u') --SELECT 'ú',ASCII('ú'); --250
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(249),'u') --SELECT 'ù',ASCII('ù'); --249
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(251),'u') --SELECT 'û',ASCII('û'); --251
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(252),'u') --SELECT 'ü',ASCII('ü'); --252
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(231),'ç') --SELECT 'ç',ASCII('ç'); --231
-- caixa alta
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(193),'A') --SELECT 'Á',ASCII('Á'); --193
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(192),'A') --SELECT 'À',ASCII('À'); --192
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(194),'A') --SELECT 'Â',ASCII('Â'); --194
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(195),'A') --SELECT 'Ã',ASCII('Ã'); --195
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(201),'E') --SELECT 'É',ASCII('É'); --201
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(200),'E') --SELECT 'È',ASCII('È'); --200
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(202),'E') --SELECT 'Ê',ASCII('Ê'); --202
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(205),'I') --SELECT 'Í',ASCII('Í'); --205
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(204),'I') --SELECT 'Ì',ASCII('Ì'); --204
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(206),'I') --SELECT 'Î',ASCII('Î'); --206
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(211),'O') --SELECT 'Ó',ASCII('Ó'); --211
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(210),'O') --SELECT 'Ò',ASCII('Ò'); --210
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(212),'O') --SELECT 'Ô',ASCII('Ô'); --212
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(213),'O') --SELECT 'Õ',ASCII('Õ'); --213
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(218),'U') --SELECT 'Ú',ASCII('Ú'); --218
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(217),'U') --SELECT 'Ù',ASCII('Ù'); --217
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(219),'U') --SELECT 'Û',ASCII('Û'); --219
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(220),'U') --SELECT 'Ü',ASCII('Ü'); --220
SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(199),'C') --SELECT 'Ç',ASCII('Ç'); --199
RETURN (@txt0)
END
GO
-- Exemplo de uso da function
-- Ex.: 01 - Removendo acentos nas consultas
-- SELECT dbo.usf_rm_accent_pt_latin1('café, Sofá, pé,caÇa, CAÇA, aviões, sapê, à, sítio, Avião, LÂMPADA, mesa, cadeira, AVIÕES');
-- Retorno: cafe, Sofa, pe,caCa, CACA, avioes, sape, a, sitio, Aviao, LAMPADA, mesa, cadeira, AVIOES
-- Ex.: 02 - Removendo acentos no campo obs da tabela1
-- UPDATE tabela1 SET obs = dbo.usf_rm_accent_pt_latin1(obs);
--
O Peregrino agradece o acesso, tenha um bom trabalho!
:)

Obrigado, me ajudou muito.
ResponderExcluirVLWZ
Seja feliz!
Excluirc cedilha minúsculo não está ok.
ResponderExcluirConfere?
Está correto, "Ç" é convertido para "C" e "ç" é convertido "c", conforme query abaixo:
ResponderExcluirSELECT char(231), char(199);
Mas se não lhe convier é só remover a linha 44 e 64 e adaptar para a sua necessidade.