我正在导入几个大型CSV文件。在这个过程中,我发现了两个重要的信息:
答案 0 :(得分:1)
看到这个问题出现了很多次,有几个不同的答案,而且很少有答案仅限于SQL查询,所以我写的是:
CREATE TABLE #table1
(
data varchar(max)
)
BULK
INSERT table1
FROM 'C:\Import\file.csv'
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR = 'somethingthatdoesntexist',
ROWTERMINATOR = '0x0A'
)
GO
ALTER TABLE table1 ADD id numeric NOT NULL IDENTITY(1,1)
ALTER TABLE report_table ADD CONSTRAINT
pk_id PRIMARY KEY CLUSTERED
(
id
) WITH (
statistics_norecompute = off,
ignore_dup_key = off,
allow_row_locks = on,
allow_page_locks = on
)
ON [PRIMARY]
从那里,您可以使用适当的意识形态来构建标题所在的位置。第一行(或第一行X)应该是标题,然后是空行之后的第一行。然后检查匹配或创建新表的现有表,并将该数据导入下一个空行。泡沫,冲洗,重复。
-- Create Processed(FALSE). Set to TRUE when properly imported.
ALTER TABLE table1 ADD processed bit NOT NULL
CONSTRAINT c_is_processed_default_no DEFAULT FALSE
-- Create Flagged(FALSE). Set to TRUE when manual review required.
-- Final step: set Flag = 1 where processed = 0; SELECT * FROM table1 WHERE flag = 1
ALTER TABLE table1 ADD flag bit NOT NULL
CONSTRAINT c_manual_review_default_no DEFAULT FALSE
公平警告,我导入的CSV非常大,所以我不得不解决内存错误。目前,我正在通过单独执行每个步骤来解决这个问题。