Tim*_*Tim 17 sql-server bulkinsert sql-server-2000 create-table openrowset
我正在寻找一种快速而又脏的方法将CSV文件导入SQL Server,而无需事先创建表并定义其列.
每个导入的CSV都将导入到自己的表中.
我们不关心数据类型推理.CSV的结构和布局各不相同,并且所有列都有很多列,但我们只关注其中的一些:街道地址和邮政编码.我们只想快速将CSV数据导入SQL数据库并提取相关列.
我想提供FieldTerminator和RowTerminator,将它指向CSV,并让实用程序完成其余工作.有没有办法创建表并使用BULK INSERT和/或OpenRowset(BULK ...)一步一步地填充它?
小智 11
引用SQLServerPedia,我认为这将有效:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
select TerritoryID
,TotalSales
,TotalCost
INTO CSVImportTable
from openrowset('MSDASQL'
,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
,'select * from C:\csvtest.CSV')
Run Code Online (Sandbox Code Playgroud)
很烦人,我还没有回复点只是评论,所以我会添加一个基于TyT的答案(处理看起来很糟糕的占有欲,顺便说一下......)
对于我来说,工作者代码需要一个双"\"而不是单个来避免"找不到文件"错误.而且您不必指定字段; 它们将从文件的第一行推断出来:
select *
into CsvImportTable
from openrowset(
'MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'select * from C:\\csvtestfile.csv')
Run Code Online (Sandbox Code Playgroud)
我没有Access驱动程序的问题.
更新:如果您对错误推断的类型有问题,请在文件顶部插入几行,并在表中输入您想要的类型的数据,这样您就得到了,比如text - > VARCHAR而不是text-> INT然后导入后删除这些行.
作为最后的结冰,向表中添加一个PK,以便您可以操作数据 - 删除虚拟行等:
alter table CsvImportTable add Id int identity(1, 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16855 次 |
| 最近记录: |