Как разобрать строку на несколько таблиц в SQL Server 2017 - PullRequest
0 голосов
/ 10 июля 2020

У меня есть текстовый файл, который был создан путем сброса в него 8 SQL таблиц. Теперь мне нужно импортировать эти данные обратно на SQL сервер.

Используя BULK insert, я смог загрузить данные в одну таблицу с одним столбцом 'FileData'.

DECLARE @FileTable TABLE (FileData NVARCHAR(MAX))

INSERT INTO @FileTable
SELECT BulkColumn 
FROM OPENROWSET( BULK N'C:\My\Path\Name\FileName.txt', SINGLE_CLOB) AS Contents

SELECT * FROM @FileTable

Итак, теперь У меня есть эта огромная строка, которую мне нужно организовать в разные таблицы.

Например, эта часть строки соответствует приведенной ниже таблице:

FileData
00001                 00000009716496000000000331001700000115200000000000  

Таблица:

enter image description here

It also seems like all fields have a set length and I can get that length.

I can see doing something like this:

select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 1,5) as RecordKey
select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 6,17) as Filler
select SUBSTRING('00001                 00000009716496000000000331001700000115200000000000   ', 23,16) as BundleAnnualPremium

введите описание изображения здесь

Но есть ли более быстрый и лучший способ загрузить эти данные в разные таблицы?

1 Ответ

1 голос
/ 10 июля 2020

Вы можете просто массовую вставку с файлом формата с самого начала. Но поскольку данные уже загружены в большую таблицу, если вы предпочитаете использовать чистый T SQL, вы можете извлекать элементы из строки, используя left(), right() и substring().

...