如何在 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()
.
我有一个文本文件,它是通过将 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()
.