2016-12-08 4 views
1

Возникла проблема при импорте CSV в базу данных SQL Server.Как импортировать CSV-файлы с '' и '' на SQL Server?

У меня , , и ,, значений в CSV, поэтому, когда я сравнивать значения в SQL b.test = a.test (т.е. '' = ' ') является ложным. Таким образом, вставка выполнена, но тест имеет уникальное ограничение, и я получаю проверку ограничений, когда b.test = '' и a.test = ' '.

Как я могу решить эту проблему?

Здесь заявление (b.marke = a.marke проблема):

INSERT INTO wt_umcodierung_bez(prnummer, marke, spk, bez, quelle) 
SELECT a.prnummer, a.marke, a.spk, a.bez, a.quelle 
FROM trans_wt_umcodierung_bez a 
WHERE NOT EXISTS (SELECT 1 
        FROM wt_umcodierung_bez b 
        WHERE b.prnummer = a.prnummer 
        AND b.marke = a.marke 
        AND b.spk = a.spk) 
AND a.spk IN (SELECT spk FROM wt_spk) 
+0

что тип данных 'test' столбца? '' '=' ''истинно, а не false' select 1 where' '=' ''result' 1' –

+1

* Как * вы импортируете файл? Это должно обрабатываться треском, которая загружает данные, она не отправляется на SQL Server. –

+0

Это varchar. Это часть предложения where. Обновит вопрос. – Sardoan

ответ

1

Вы можете удвоить обрезать поля в этом случае, чтобы убедиться, что вы отбросите все ведущие или завершающие пробелы , Если у вас возникли проблемы со значениями NULL, вы можете дополнительно обернуть a.marke и b.marke в ISNULL, а затем LTRIM (RTRIM())

INSERT INTO wt_umcodierung_bez(prnummer, marke, spk, bez, quelle) 
SELECT a.prnummer, a.marke, a.spk, a.bez, a.quelle 
FROM trans_wt_umcodierung_bez a 
WHERE NOT EXISTS (SELECT 1 
        FROM wt_umcodierung_bez b 
        WHERE b.prnummer = a.prnummer 
        AND LTRIM(RTRIM(b.marke)) = LTRIM(RTRIM(a.marke)) 
        AND b.spk = a.spk) 
AND a.spk IN (SELECT spk FROM wt_spk) 
+0

Производительность этого запроса будет * очень * плохой, потому что он не сможет использовать какие-либо индексы на 'marke'. Применение функций в столбце не позволяет оптимизатору запросов использовать индексы, поскольку индексированные значения не имеют ничего общего с результатами функции. Это приведет к полному сканированию таблиц обеих таблиц. –

+0

O нет, просто обрезка? Большое спасибо, вы решили это :) – Sardoan

Смежные вопросы