У меня есть программа на C #, которая читает данные из файла, а затем вставляет уникальные строки в таблицу SQL (через System.Data.SqlClient). Проблема в том, что SQL считает определенные строки эквивалентными, а C # - нет.
Вот пример. Предположим, что моя программа на C # сгенерировала первые две строки SQL-скрипта ниже. Очевидно, что C # будет рассматривать «2» и «верхний индекс-2» как разные, но, как вы можете видеть, SQL этого не делает:
DECLARE @S1 NVARCHAR(10) = '2';
DECLARE @S2 NVARCHAR(10) = '²';
DROP TABLE IF EXISTS #Test;
CREATE TABLE #Test(S NVARCHAR(10) NOT NULL);
CREATE UNIQUE INDEX I1 ON #Test(S);
INSERT #Test SELECT @S1;
INSERT #Test SELECT @S2;
Сообщение 2601, Уровень 14, Состояние 1, Строка 7 Не удается вставить строку повторяющегося ключа в
объект 'dbo. # Test' с уникальным индексом 'I1'. Дубликат значения ключа
(²). Заявление было прекращено.
Я могу обойти эту проблему, используя функцию C # String.Normalize, но это на самом деле изменяет строки, которые мне не очень нравятся. В идеале я мог бы сравнить две строки в C # так же, как это делает SQL.
Какие-нибудь решения для этого?
Я должен добавить: вся цель этого упражнения - выполнение. При запуске программы программа C # считывает текущий список таблицы строк в память, затем читает файл данных, добавляя строки в таблицу памяти по мере необходимости. После того, как все данные прочитаны, вставки выполняются из C # против SQL.
Кстати, у нас такая же проблема в SSIS, когда мы выполняем поиск кодов, считываемых из текстовых файлов, и подготавливаем вставки для SQL.