我们有以下格式的记录:
99 0882300 25 YATES ANTHONY V MAY 01 12 04 123456 12345678宽度是固定的,我们需要将其导入SQL。我们尝试了大容量导入,但它不起作用,因为它没有',‘或'\t’分隔。在文本文件中,它由不同长度的空格分隔,这就是我们的困境所在。
对如何处理这个问题有什么建议吗?谢谢!
发布于 2012-03-08 06:00:05
当您更熟悉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 发布于 2015-10-21 21:26:42
这个问题已经很老了,但可能仍然相关。
我和你有完全一样的问题。我的解决方案是使用BULK INSERT和格式化文件。
这将允许您:
,您可以轻松地调整
为了切入主题,下面是我的数据格式(即一行)
608054000500SS001 ST00BP0000276AC024 19980530G10379 00048134501283404051N02912WAC 0024 04527N05580WAC 0024 1998062520011228E04ST 04856 -94.769323 26.954832
-94.761114 26.953626G10379 183 1下面是我的SQL代码:
BULK INSERT dbo.TARGET_TABLE
FROM 'file_to_upload.dat'
WITH (
BATCHSIZE = 2000,
FIRSTROW = 1,
DATAFILETYPE = 'char',
ROWTERMINATOR = '\r\n',
FORMATFILE = 'formatfile.Fmt'
);请注意这里设置的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我把文档链接放在下面,但是你必须要注意的是:
,它也必须保持为
额外的注意:在我的例子中,我只需要三个字段,所以中间的内容我只称为“ignored”,而在我的格式文件中被忽略了(您在第6列中更改了数字,请参阅文档)。
希望它能满足你的需求,对我来说没问题。干杯
此处的文档:https://msdn.microsoft.com/en-us/library/ms178129.aspx https://msdn.microsoft.com/en-us/library/ms187908.aspx
发布于 2015-04-28 08:07:29
要从TXT导入到SQL:
创建表#DaTable (MyString VARCHAR(MAX));
BULK INSERT #DaTable FROM'C:\Users\usu...IDA_S.txt‘WHITH ( CODEPAGE = 'RAW’)
https://stackoverflow.com/questions/9608838
复制相似问题