我搜索了这么多,我找不到将此txt文件导入SQL服务器的任何解决方案。 它有数字(1),类(A),名称(Eda),姓氏(KKKK),答案1,答案2列。
1AEdaKKKK ACDBDCABCE,BBCBBACABA
2AİremDudson BDCEDDCABA,BDCABDEAAA
3ANefisGaga ADCBDACDBC,AEAEBAAEDA
4ABohoDhae BDCABDEAAA,ADCDBECBBA
我该怎么办?
答案 0 :(得分:0)
您可以导入文件,然后根据条件手动拆分它们。
e.g。我用这段代码测试了它并且它有效
-- 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
虽然看起来有些臃肿(可能会变得更简单)。
或者,在导入文件之前放入分隔符然后它变得非常容易。