Так что это своего рода продолжение моего последнего вопроса
У меня есть строка, которая выглядит следующим образом:
Acc_id,Field label,Data point
Я хотел бы создать таблицу из приведенной выше строки, используя что-то вроде
CREATE TABLE #temp
(Acc_id NVARCHAR(MAX),
Field label REAL,
Data point REAL)
Запятые разделяют столбцы - они должны быть динамическими, поэтому, если появляется больше столбцов, они создаются в таблице.
UPDATE:
это то, что у меня пока далеко от сети, но мне нужно сделать первый столбец NVARCHAR, а остальные реальными, а не наоборот.
declare @path NVARCHAR(MAX)
SET @path = 'c:\temp\Book2.txt'
declare @execSQL nvarchar(1000)
declare @tempstr varchar(1000)
declare @col varchar(1000)
declare @table nvarchar(1000)
-- Create a temp table to with one column to hold the first row of the csv file
CREATE TABLE #tbl (line VARCHAR(1000))
SET @execSQL =
'BULK INSERT #tbl
FROM ''' + @path + '''
WITH (
FIELDTERMINATOR ='','',
FIRSTROW = 1,
ROWTERMINATOR = ''\n'',
LASTROW = 1
)
'
EXEC sp_executesql @stmt=@execSQL
update #tbl set line = REPLACE(line,' ','_') where line like '% %'
SET @col = ''
SET @tempstr = (SELECT TOP 1 RTRIM(REPLACE(Line, CHAR(9), ',')) FROM #tbl)
DROP TABLE #tbl
WHILE CHARINDEX(',',@tempstr) > 0
BEGIN
SET @col=@col + LTRIM(RTRIM(SUBSTRING(@tempstr, 1, CHARINDEX(',',@tempstr)-1))) + ' varchar(100),'
SET @tempstr = SUBSTRING(@tempstr, CHARINDEX(',',@tempstr)+1, len(@tempstr))
END
SET @col = @col + @tempstr + ' real'
IF Object_id('tempdb..##temptable') IS NOT NULL
DROP TABLE #temptable
SET @table = 'create table ##temptable (' + @col + ')'
EXEC sp_executesql @stmt=@table
-- Load data from csv
SET @execSQL =
'BULK INSERT ##temptable
FROM ''' + @path + '''
WITH (
FIELDTERMINATOR ='','',
FIRSTROW = 2,
ROWTERMINATOR = ''\n''
)
'
EXEC sp_executesql @stmt=@execSQL
Спасибо
Rob