csv 本地TSV文件到SQL表

inb24sb2  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(181)

我在本地计算机上有一个tsv文件,需要将值加载到SQL表中。是否可以编写一个执行此操作的SQL脚本?或者是否必须创建SSIS包或使用类似的工具?

n3schb8v

n3schb8v1#

解决方案 * 很少 *:

  1. SQL Server Management Studio〉选择目标数据库节点〉打开上下文菜单〉任务〉导入数据...
  2. SQL Server集成服务〉Flat File Source
    1.带有\tCOLUMNTERMINATOR的T-SQL语句
    1.带有format file and \t terminator的T-SQL函数OPENROWSET(BULK 'file path')
    1.具有-t参数的bcp刀具(预设值\t
  3. TextFieldParser类(具有Delimiters属性)与{SqlBulkCopy类或SqlCommand类}
    1.其他解决方案。
    注意:对于3)和4),源文件必须由SQL Server示例访问(通常,这意味着源文件必须与SQL Server位于同一台计算机上)
az31mfrm

az31mfrm2#

@Bogdan Sahlean给出了非常详尽的回复。
然而,我们都知道,导入任何文件在SQL Server是不容易的,它总是在第一次尝试失败。
如果你像我一样***恼怒***,同时导入一个.tsv,像this one一样的重量只有几千兆位,我有一个快速的解决方案给你。
在SSMS 2017中,您可以执行以下操作:右键单击数据库〉Tasks〉Import Flat File...(任务〉导入平面文件...),并将所有Data Type(数据类型)设置为nvarchar(MAX),将所有行设置为Allow Nulls

这样,您将导入数据 * 错误的方式 *,但至少它们是导入的。
您现在可以工作来清理它们。

**EDIT:**如果您面对Exception of type 'System.OutOfMemoryException' was thrown. (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导入:

BULK INSERT OpenStreetMap
FROM 'C:\Users\franc\Desktop\planet-latest_geonames.tsv\planet-latest_geonames-sorted.tsv'
WITH (
  DATAFILETYPE = 'char',
  FIELDTERMINATOR = '\t',
  KEEPNULLS
);

**EDIT、EDIT:**如果因为表格太大而再次失败,您可以:

1.使用我在上面粘贴的第一个查询创建表
1.在CMD终端上运行以下命令:

bcp ip2location.dbo.OpenStreetMap in C:\Users\franc\Desktop\行星最新地理名称.tsv\行星最新地理名称排序.tsv -S本地主机-U sqlninja -P sqlninja -c -r /r

编辑,编辑,编辑:

仍然失败?让我们尝试SQLCMD
1.使用上面的查询创建表
1.将上面的BULK INSERT查询保存在一个名为Target.sql的文件中,然后:

sqlcmd -S本地主机-d ip 2位置-U数据库管理程序-P数据库管理程序-i Target.sql -o错误.txt

相关问题