Sql-Server
如何將 CSV 數據的第一行設置為 SQL Server 中的列名?
我正在使用 BULK INSERT 讀取 SQL Server 中的 csv 文件。有沒有辦法在我讀取文件時將第一行保留為列名?
如果沒有,在從 csv(從第二行)讀取數據後,如何向其中添加列名?
非常感謝任何幫助/評論/建議。
如果沒有,在從 csv(從第二行)讀取數據後,如何向其中添加列名?
我會把你的注意力放在這裡。首先,使用 yoru 列名、數據類型等創建表。
create table myTable (column1 <datatype>, column2 <datatype>)
然後,批量插入其中但忽略第一行。
bulk insert myTable from 'C:\somefile.csv', with( firstrow = 2, fieldterminator = ',', rowterminator = '\n')
如果它是動態的,那麼您可能需要查看
openrowset
.
假設您正在導入標準 CSV,您可以像這樣動態創建表:
DECLARE @sql NVARCHAR(MAX) DECLARE @filePath NVARCHAR(MAX) = 'C:/SomeFolder/yourImportFile.csv' DECLARE @tableName NVARCHAR(MAX) = 'yourTableName' DECLARE @colString NVARCHAR(MAX) SET @sql = 'SELECT @res = LEFT(BulkColumn, CHARINDEX(CHAR(10),BulkColumn)) FROM OPENROWSET(BULK ''' + @filePath + ''', SINGLE_CLOB) AS x' exec sp_executesql @sql, N'@res NVARCHAR(MAX) output', @colString output; SELECT @sql = 'DROP TABLE IF EXISTS ' + @tableName + '; CREATE TABLE [dbo].[' + @tableName + ']( ' + STRING_AGG(name, ', ') + ' ) ' FROM ( SELECT ' [' + value + '] nvarchar(max) ' as name FROM STRING_SPLIT(@colString, ',') ) t EXECUTE(@sql)
然後按照@scsimon 的建議批量插入數據:
BULK INSERT dbo.yourTableName. FROM 'C:/SomeFolder/yourImportFile.csv' WITH ( FORMAT='CSV', FIRSTROW = 2, ROWTERMINATOR = '\n', FIELDQUOTE= '"', TABLOCK )