正在将 txt 导入 SQL 服务器
Importing txt to SQL Server
我搜索了很多,但找不到将此 txt 文件导入到 SQL 服务器的任何解决方案。
它有 number(1),class(A),name(Eda),lastname(KKKK),answers1,answers2 列。
1AEdaKKKK ACDBDCABCE,BBCBBACABA
2AİremDudson BDCEDDCABA,BDCABDEAAA
3ANefisGaga ADCBDACDBC,AEAEBAAEDA
4ABohoDhae BDCABDEAAA,ADCDBECBBA
我该怎么办?
您可以导入文件,然后根据条件手动拆分它们。
例如我用这段代码测试了它并且它有效
-- 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
虽然这看起来有点臃肿(并且可能会变得更简单)。
或者,在导入文件之前输入分隔符,这样会变得非常非常容易。
我搜索了很多,但找不到将此 txt 文件导入到 SQL 服务器的任何解决方案。 它有 number(1),class(A),name(Eda),lastname(KKKK),answers1,answers2 列。
1AEdaKKKK ACDBDCABCE,BBCBBACABA
2AİremDudson BDCEDDCABA,BDCABDEAAA
3ANefisGaga ADCBDACDBC,AEAEBAAEDA
4ABohoDhae BDCABDEAAA,ADCDBECBBA
我该怎么办?
您可以导入文件,然后根据条件手动拆分它们。
例如我用这段代码测试了它并且它有效
-- 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
虽然这看起来有点臃肿(并且可能会变得更简单)。
或者,在导入文件之前输入分隔符,这样会变得非常非常容易。