首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将固定宽度文本导入SQL

将固定宽度文本导入SQL
EN

Stack Overflow用户
提问于 2012-03-08 04:50:26
回答 5查看 22.4K关注 0票数 1

我们有以下格式的记录:

代码语言:javascript
复制
99 0882300 25 YATES ANTHONY V MAY 01 12 04 123456 12345678

宽度是固定的,我们需要将其导入SQL。我们尝试了大容量导入,但它不起作用,因为它没有',‘或'\t’分隔。在文本文件中,它由不同长度的空格分隔,这就是我们的困境所在。

对如何处理这个问题有什么建议吗?谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-08 06:00:05

当您更熟悉SQL而不是导入工具时,可以将文件大容量导入到临时表中的单个VARCHAR(255)列中。然后使用SQL处理所有记录,并将它们转换为您的目标表:

代码语言:javascript
复制
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 
票数 8
EN

Stack Overflow用户

发布于 2015-10-21 21:26:42

这个问题已经很老了,但可能仍然相关。

我和你有完全一样的问题。我的解决方案是使用BULK INSERT和格式化文件。

这将允许您:

  1. 使代码更简洁
  2. 将文本文件的映射上传到单独的文件中,如果您喜欢

,您可以轻松地调整

  • 跳过列

为了切入主题,下面是我的数据格式(即一行)

代码语言:javascript
复制
608054000500SS001 ST00BP0000276AC024   19980530G10379    00048134501283404051N02912WAC 0024 04527N05580WAC 0024 1998062520011228E04ST 04856      -94.769323       26.954832     
-94.761114       26.953626G10379    183    1

下面是我的SQL代码:

代码语言:javascript
复制
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。

下面是格式化文件

代码语言:javascript
复制
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

我把文档链接放在下面,但是你必须要注意的是:

  1. 第5列中的""s,这表示分隔符(对于.csv来说显然是","),在我们的示例中设置为“”;
  2. 第2列完全是"SQLCHAR",因为它是一个文本文件。即使数据表中的目标字段是一个整数(这是我的情况)

,它也必须保持为

额外的注意:在我的例子中,我只需要三个字段,所以中间的内容我只称为“ignored”,而在我的格式文件中被忽略了(您在第6列中更改了数字,请参阅文档)。

希望它能满足你的需求,对我来说没问题。干杯

此处的文档:https://msdn.microsoft.com/en-us/library/ms178129.aspx https://msdn.microsoft.com/en-us/library/ms187908.aspx

票数 10
EN

Stack Overflow用户

发布于 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’)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9608838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档