CodeInside
@CodeInside

Что произошло с записями после BULK INSERT?

Заполнил таблицу данными с файла:
CREATE TABLE Country (
	Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
	Name NVARCHAR(64) NOT NULL UNIQUE
	);
GO
CREATE TABLE #CountriesFromFile (Name NVARCHAR(MAX));

BULK INSERT #CountriesFromFile
FROM 'E:\MS-SQL\Exam\Data\Countries.txt'
	WITH (
		ROWTERMINATOR = '0x0a'
		);

INSERT INTO Country
SELECT *
FROM #CountriesFromFile;

DROP TABLE #CountriesFromFile;

Кодировка файла с данными UTF-8. Все данные на латинице. Проблемы после выполнения данного фрагмента кода:
  1. Почему-то в конце значения каждого поля добавился пробел (думаю это связано с ROWTERMINATOR = '0x0a').
  2. Никак не могу сравнивать с чем-то значения в таблице. Например, делаю SELECT * FROM Country; КОПИРУЮ данные с какий-либо полученной ячейки. Делаю запрос
    SELECT *
    FROM Country
    WHERE Country.[Name] = 'Belgium ';



Вместо 'Belgium ' какое-либо значение с копипаста. Как видите, скопировало с пробелом в конце. В итоге СУБД не находит никаких совпадений. Понимаю если бы это была кириллица. Единственный вариант, который мне пришёл в голову - проблема с кодировкой. Но не знаю как её решить (если это ещё она). Поможете?
  • Вопрос задан
  • 532 просмотра
Решения вопроса 2
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
UPDATE Country
SET NAME = TRIM(NAME)

Тоже проделывать с временной таблицей при экспорте.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Глядя на bulk insert во временную таблицу я немного взгрустнул)))

Рекомендую посмотреть на "инверсный" вариант:

select
or.* -- или явный перечень того что надо с нужными трансформациями типа ltrim(rtrim()), cast() итп
from openrowset (
BULK 'E:\MS-SQL\Exam\Data\Countries.txt', 
FORMATFILE =  'E:\MS-SQL\Exam\Data\Countries.xml'
) as or
-- а тут можно нужные join, where, group итп.


Придется чутка подразобраться со структурой форматфайла, но это принесет неоценимую пользу в плане более тщательного указания что за данные должны быть, перекодировок и т.п. По сути получится карманный вариант import-export wizard
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы