如何在 SQL Server 2017 中将字符串解析为多个表

How to parse string into multiple tables in SQL Server 2017

我有一个文本文件,它是通过将 8 SQL table 转储到其中创建的。现在我需要将这些数据导入回 SQL 服务器。

使用 BULK 插入,我能够将数据加载到具有单列 'FileData' 的一个 table 中。

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

所以现在我有这个巨大的字符串,我需要将其组织成不同的 tables。

例如这部分字符串对应于下面的table:

FileData
00001                 00000009716496000000000331001700000115200000000000  

Table:

似乎所有字段都有固定长度,我可以得到那个长度。

我可以看到做这样的事情:

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

但是有没有更快更好的方法将这些数据加载到不同的 table 中?

你可以 bulk insert with a format file right from the start. But since the data is already loaded into a big table, if you'd rather use pure TSQL, you can pull elements out of a string using left(), right(), and substring().