Вы можете динамически построить глобальную временную таблицу из входного файла.
Первоначально файл CSV загружается во временную таблицу с одним столбцом.Затем операторы SQL создаются для создания глобальной временной таблицы, а затем снова для ее массового копирования.
Обратите внимание , что FIELDTERMINATOR = ',' изменяется во второй массовой копии.
declare @ix int;
-- bulk insert into a table with one row
create table #CSV (Col1 varchar(8000))
BULK INSERT #CSV
FROM 'c:\temp\BulkCopyTest.txt'
WITH (FIELDTERMINATOR = '||', ROWTERMINATOR = '\n', FIRSTROW=1)
-- dynamically create a CREATE TABLE statement
declare @CreateTableSQL varchar(8000);
set @CreateTableSQL = 'create table ##T (';
declare @Row varchar(8000);
select top 1 @Row = col1 from #CSV;
-- split apart the row
set @ix = 1;
while (charindex(',',@Row)>0)
begin
set @CreateTableSQL = @CreateTableSQL + 'COL'+convert(varchar,@ix)+' varchar(100), ';
set @Row = substring(@Row,charindex(',',@Row)+1,len(@Row))
set @ix = @ix + 1
end
set @CreateTableSQL = @CreateTableSQL + 'COL'+convert(varchar,@ix)+' varchar(100))';
-- create the temp table
exec( @CreateTableSQL );
-- populate the temp table
BULK INSERT ##T
FROM 'c:\temp\BulkCopyTest.txt'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW=1)
select * from ##T;
.
.
.
drop table ##T
drop table #CSV