将本地TSV文件导入SQL表
我在本地计算机上有一个tsv文件,需要将这些值加载到SQL表中。我可以写一个SQL脚本来实现这一点吗?还是必须制作SSIS包或使用类似工具?解决方案很少:将本地TSV文件导入SQL表,sql,sql-server,tsv,Sql,Sql Server,Tsv,我在本地计算机上有一个tsv文件,需要将这些值加载到SQL表中。我可以写一个SQL脚本来实现这一点吗?还是必须制作SSIS包或使用类似工具?解决方案很少: SQL Server Management Studio>选择目标数据库节点>打开上下文菜单>任务>导入数据 SQL Server集成服务> 带有\T T-SQL函数OPENROWSET(大容量“文件路径”) 带有-t参数的工具(默认值\t) 类(使用分隔符propery)和{class或class} 其他解决办法 注意:对于3)和4)源文件
\T
OPENROWSET(大容量“文件路径”)
-t
参数的工具(默认值\t
)分隔符propery)和{class或class}
注意:对于3)和4)源文件必须由SQL Server实例访问(通常,这意味着源文件必须与SQL Server位于同一台计算机上)@Bogdan Sahlan给出了非常详尽的答复 然而,我们都知道,在SQL Server中导入任何文件都不容易,而且在第一次尝试时总是失败 如果您在导入一个重量为几GB的
.tsv
时像我一样恼怒了,我会为您提供一个快速解决方案
在SSMS 2017中,您可以执行以下操作:右键单击数据库>任务>导入平面文件,并为所有数据类型设置nvarchar(MAX)
,并为所有行勾选允许空值:
这样,您将以错误的方式导入数据,但至少它们已导入
你现在可以把它们清理干净了
编辑:如果您遇到类型为“System.OutOfMemoryException”的异常被抛出。(mscorlib)
您可以创建以下表格:
USE ip2location;
GO
DROP TABLE OpenStreetMap;
CREATE TABLE OpenStreetMap
(
name nvarchar(MAX) NULL,
alternative_names nvarchar(MAX) NULL,
osm_type nvarchar(MAX) NULL,
osm_id nvarchar(MAX) NULL,
class nvarchar(MAX) NULL,
type nvarchar(MAX) NULL,
lon nvarchar(MAX) NULL,
lan nvarchar(MAX) NULL,
place_rank nvarchar(MAX) NULL,
importance nvarchar(MAX) NULL,
street nvarchar(MAX) NULL,
city nvarchar(MAX) NULL,
county nvarchar(MAX) NULL,
state nvarchar(MAX) NULL,
country nvarchar(MAX) NULL,
display_name nvarchar(MAX) NULL,
west nvarchar(MAX) NULL,
south nvarchar(MAX) NULL,
east nvarchar(MAX) NULL,
north nvarchar(MAX) NULL,
wikidata nvarchar(MAX) NULL,
wikipedia nvarchar(MAX) NULL,
housenumbers nvarchar(MAX) NULL,
);
GO
然后使用大容量插入导入:
BULK INSERT OpenStreetMap
FROM 'C:\Users\franc\Desktop\planet-latest_geonames.tsv\planet-latest_geonames-sorted.tsv'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '\t',
KEEPNULLS
);
编辑,编辑:如果由于表太大而再次失败,您可以:
使用上面粘贴的第一个查询创建表
在CMD终端上运行此命令:
C:\Users\franc\Desktop\planet-latest\U geonames.tsv\planet-latest\U geonames-sorted.tsv-S localhost-U sqlninja-p sqlninja-C-r/r中的bcp ip2location.dbo.OpenStreetMap
编辑,编辑,编辑:
还是失败?让我们试试SQLCMD
:
使用上面的查询创建表
将上面的BULK INSERT
查询保存到名为Target.sql
或其他文件中,然后:
sqlcmd-S localhost-d ip2location-U sqlninja-p sqlninja-i Target.sql-o Errors.txt如果是一次性作业,可以使用导入向导。stackoverflow.com/questions/31557148/sql-server-how-to-import-excel-to-create-a-table/可以使用批量插入。做一些研究,试试看。如果需要帮助,请发布一些示例和代码