【问题标题】:Importing txt to SQL Server将 txt 导入 SQL Server
【发布时间】:2016-03-01 01:24:55
【问题描述】:

我搜索了很多,但找不到将此 txt 文件导入 SQL Server 的任何解决方案。 它有 number(1),class(A),name(Eda),lastname(KKKK),answers1,answers2 列。

1AEdaKKKK           ACDBDCABCE,BBCBBACABA
2AİremDudson        BDCEDDCABA,BDCABDEAAA
3ANefisGaga         ADCBDACDBC,AEAEBAAEDA
4ABohoDhae          BDCABDEAAA,ADCDBECBBA

我该怎么办?

【问题讨论】:

  • 数字在哪里结束和类开始(分隔符)?
  • 没有分隔符(制表符除外),纯文本。1是数字A是类Eda是名称。
  • 我怀疑这严格来说是一个 sql-server 问题。我会说这是需要重新组织才能使导入成为可能的文件。
  • 你说的太对了。我用逗号用这个,然后我的老师改变了它。知道我正在努力解决。

标签: sql-server database import text-files


【解决方案1】:

您可以导入文件,然后根据条件手动拆分它们。

例如我用这段代码测试了它,它工作了

-- CREATE TABLE tmpImport ([col1] NVARCHAR(200), [col2] NVARCHAR(200))
-- BULK INSERT tmpImport FROM 'C:\textfile.txt' WITH (ROWTERMINATOR = '0x0a')
-- CREATE TABLE tblName ([number] INT, [class] CHAR(1), [name] NVARCHAR(50), [lastname] NVARCHAR(50), [answers1] NVARCHAR(50), [answers2] NVARCHAR(50))
-- UPDATE tblImport SET [col1] = LTRIM(RTRIM([col1])), [col2] = LTRIM(RTRIM([col2])) -- maybe not necessary

INSERT tblName ([number], [class], [name], [lastname], [answers1], [answers2])
SELECT SUBSTRING([col1], 1, PATINDEX('%[^0-9]%', [col1]) - 1) -- number
    , SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]), 1) -- class
    , SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 1,
                PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%',
                SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 2, LEN([col1])) COLLATE sql_latin1_general_cp1_cs_as)) -- firstname
    , SUBSTRING([col1], 
                CHARINDEX(SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 1,
                PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%',
                SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 2, LEN([col1])) COLLATE sql_latin1_general_cp1_cs_as)), [col1]) + LEN(SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 1,
                PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%',
                SUBSTRING([col1], PATINDEX('%[^0-9]%', [col1]) + 2, LEN([col1])) COLLATE sql_latin1_general_cp1_cs_as))), LEN([col1])) -- lastname
    , SUBSTRING([col2], 1, CHARINDEX(',', [col2]) - 1) -- answers1
    , SUBSTRING([col2], CHARINDEX(',', [col2]) + 1, LEN([col2])) -- answers2
FROM tmpImport

-- SELECT * FROM tblName -- check
-- DROP TABLE tmpImport

这看起来有点臃肿(可能会更简单)。

或者,在导入文件之前添加分隔符,它会变得非常、非常、容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2014-10-26
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多