Цю проблему можна вирішити за допомогою акцентування нечутливих зіставлень .
Ваша база даних, ймовірно, використовує порівняння AS (Accent Sensitive), тому за замовчуванням вона шукатиме точну відповідність, включаючи акценти.
Ви можете доручити пункт WHERE використовувати інше порівняння, ніж за замовчуванням у базі даних, вказавши порівняння для порівняння.
У цьому dbfiddle я створив приклад, використовуючи зібрання LATIN1, але ви можете використати той самий підхід до порівняння, яке ви використовуєте, просто змінивши AS в AI для порівняння, яке використовує ваш стовпець.
Використовуйте підставку Accent Insensitive, яка відповідає порівнянню, яку використовує Colummn. Наприклад, якщо стовпець використовує SQL_Latin1_General_CP1_CI_AS, використовує, SQL_Latin1_General_CP1_CI_AIа не, Latin1_General_CI_ASабо Latin1_General_100_CI_ASбудь-яку з варіацій цих двох, оскільки поведінка зіставлень, що не належать до SQL_, буде відрізнятися більше способів, ніж просто нечутливість до акцентів, і цього може не очікувати користувачам.
Ви можете перевірити поточне порівняння в sys.columns.
CREATE TABLE testaccent (name nvarchar(50));
GO
INSERT INTO testaccent (name) VALUES ('Millière') , ('Milliere');
GO
-- returns Miliere
SELECT * FROM testaccent WHERE name = 'Milliere';
-- returns both
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AI
--only returns Miliere
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AS
Докладнішу інформацію читайте за допомогою зібрань SQL Server .
Потім ви, мабуть, хочете сортувати, щоб використовувати це порівняння (як зауважив peufeu в коментарях), щоб "é" сортувало з "e". В іншому випадку хтось, хто пагінізує результати в алфавітному порядку, буде здивований, що не знайде "é" там, де вони їх очікують, але якщо ви хочете лише торкнутися цього запиту, ви також можете додати цю COLLATEпропозицію ORDER BY.
Як зазначає Соломон Руцький у коментарях, якщо це стосується лише 1 або декількох стовпців, інший варіант - створити непостійний обчислюваний стовпець, який просто повторює стовпчик "ім'я" та забезпечує порівняння нечутливого зіставлення, а потім індексує обчислені стовпчик. Це дозволяє уникнути сканування, викликаного зміною зіставлення в запиті. Тоді запит потрібно відфільтрувати у новому стовпці.
Щось на зразок:
ALTER TABLE
dbo.[table_name] ADD [SearchName] datatype_of_name_column
AS ([Name] COLLATE LATIN1_GENERAL_100_CI_AI));
CREATE INDEX [IX_table_name_SearchName]
ON dbo.[table_name] ([SearchName] ASC);
Або ви також можете створити подання замість додавання обчислюваного стовпця (як віддає перевагу jyao ).