我们有这种格式的记录:
99 0882300 25 YATES ANTHONY V MAY 01 12 04 123456 12345678
Run Code Online (Sandbox Code Playgroud)
宽度是固定的,我们需要将其导入SQL.我们尝试了批量导入,但它不起作用,因为它不是','或'\ t'分开.它在文本文件中由不同长度的单个空格分隔,这是我们的困境所在.
有关如何处理这个的任何建议?谢谢!
问题很旧但可能仍然有用.
我和你有完全相同的问题.我的解决方案是使用BULK INSERT和FORMAT文件.
这将允许您:
要切入追逐,这是我的数据格式(即一行)
608054000500SS001 ST00BP0000276AC024 19980530G10379 00048134501283404051N02912WAC 0024 04527N05580WAC 0024 1998062520011228E04ST 04856 -94.769323 26.954832
-94.761114 26.953626G10379 183 1
Run Code Online (Sandbox Code Playgroud)
这是我的SQL代码:
BULK INSERT dbo.TARGET_TABLE
FROM 'file_to_upload.dat'
WITH (
BATCHSIZE = 2000,
FIRSTROW = 1,
DATAFILETYPE = 'char',
ROWTERMINATOR = '\r\n',
FORMATFILE = 'formatfile.Fmt'
);
Run Code Online (Sandbox Code Playgroud)
请注意那里设置的ROWTERMINATOR参数和DATAFILETYPE.
这是格式文件
11.0
6
1 SQLCHAR 0 12 "" 1 WELL_API SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 19 "" 2 SPACER1 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 8 "" 3 FIELD_CODE SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 95 "" 4 SPACER2 SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 5 "" 5 WATER_DEPTH SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 93 "" 6 SPACER3 SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)
我在下面放了文档链接,但你必须注意以下几点:
额外注意:在我的情况下我只需要三个字段,所以中间的东西我只是称为"spacer",在我的格式文件中被忽略(你在第6列中更改数字,请参阅文档).
希望它能满足您的需求,对我来说很好.干杯
文档:https : //msdn.microsoft.com/en-us/library/ms178129.aspx https://msdn.microsoft.com/en-us/library/ms187908.aspx
小智 6
当您感觉更喜欢使用SQL而不是导入工具时,您可以将文件批量导入到临时表中的单个VARCHAR(255)列中.然后使用SQL处理所有记录并将它们转换为目标表:
CREATE TABLE #DaTable(MyString VARCHAR(255))
INSERT INTO #DaTable(MyString) VALUES ('99 0882300 25 YATES ANTHONY V MAY 01 12 04 123456 12345678')
INSERT INTO FInalTable(Col1, Col2, Col3, Name)
SELECT CAST(SUBSTRINg(MyString, 1, 3) AS INT) as Col1,
CAST(SUBSTRING(MyString, 4, 7) AS INT) as Col2,
CAST(SUBSTRING(MyString, 12, 3) AS INT) as Col3,
SUBSTRING(MyString, 15, 6) as Name
FROM #DaTable
result: 99 882300 25 YATES
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17609 次 |
| 最近记录: |