G'全部
我有一个文件夹会定期将文件文件转储到其中,我试图将其导入到单个SQL表中。 文本文件的基本格式如下:
[DATA]
Test: 12345
Test type: Random Test Information - Not Important
Test date: 01/10/2010
Test time: 12:00:00
Channel number: 1
Rate: 12.345 kN/min
Start load: 12.345 kN
Stop load: 12 %
Area: 12345.678 mm²
[RESULTS]
END TEST STOP
Maximum load: 12.345 kN
Maximum strength: 1.234 MPa
[GRAPHINFO]
Axis0=6;0;60;0;0;0
Axis1=3;0.000;25.000;255;0;65535
Graph1=0;1
[GRAPH]
Time [sec] Load [kN]
0.050 0.123
0.100 0.456
0.150 0.789
0.200 1.123
0.250 1.456
0.300 1.789
0.350 2.123
0.400 2.456
0.450 2.789
0.500 3.123
0.550 3.456
[CHECKSUM]
123ABC4D
'图表'部分的长度可能不同,因此解决方案需要知道何时停止。
我想要导入的数据是
我的第一张表如下所示:
----------------------------------------------------------------------------------------
|TestNo|TestDate|TestTime|LoadRate|StartLoad|StopLoad|Area|MaxLoad|MaxStrength|Checksum|
我的第二张表如下所示:
------------------
|TestNo|Time|Load|
TestNo将成为我控制数据的主键。
更新 现在我有了以下
--Import Test Results File into temp TextImport table
DROP TABLE #TextImport
CREATE TABLE #TextImport ( line VARCHAR(8000) )
INSERT INTO #TextImport
( line )
EXECUTE MASTER..xp_cmdShell 'Type "\\FilePath\Example.txt"'
--Creates TestNo temp table to parse out data within
DROP TABLE #TestNo
CREATE TABLE #TestNo (data VARCHAR(8000), [row] VARCHAR(8000))
--Inserts TestNo into TestData temp table
INSERT INTO #TestNo(data, [row])
SELECT stuff(line, 1, 5+charindex('Test: ', line), ''),ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS [ROW] FROM #TextImport
--Inserts TestNo from above into Results table
--Assumes TestNo is always on Line 2
INSERT INTO [dbo].[Results] (TestNo)
SELECT
data
FROM
#TestNo
WHERE [ROW] = 2
--Creates TestDate temp table
DROP TABLE #TestDate
CREATE TABLE #TestDate (data VARCHAR(8000), [row] VARCHAR(8000))
--Inserts TestDate into TestData temp table
INSERT INTO #TestDate(data, [row])
SELECT stuff(line, 1, 10+charindex('Test date: ', line), ''),ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS [ROW] FROM #TextImport
--Inserts TestDate from above into Results table
--Assumes TestDate is always on Line 4
----Need to pull TestNo from above rather than hard-coding it
UPDATE [dbo].[Results]
SET TestDate = (
SELECT
data
FROM
#TestDate
WHERE [ROW] = 4
)
WHERE TestNo = 12345
所以现在最重要的问题是
答案 0 :(得分:0)
我认为你的文本文件的格式有点问题 我最近一直在导入文本文件,但它们有这样的结构:
12345;'01/10/2010';'12:00:00';'12.345 kN';'1.234 MPa';;'123ABC4D'
这就是你的文件结构应该如何使它变得容易 如果你有这种格式,你可以使用以下代码导入文件。
load data local infile file.txt
into table data
character set latin1
fields terminated by ';';
我知道这不是你期望的答案,但我个人推荐的是一个小脚本,它将数据放入这种格式,然后以正常方式导入。其他任何事情都会有点复杂。
我希望这至少有所帮助。
问候,
塞巴斯蒂安