Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将本地TSV文件导入SQL表_Sql_Sql Server_Tsv - Fatal编程技术网

将本地TSV文件导入SQL表

将本地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)源文件

我在本地计算机上有一个tsv文件,需要将这些值加载到SQL表中。我可以写一个SQL脚本来实现这一点吗?还是必须制作SSIS包或使用类似工具?

解决方案很少:

  • SQL Server Management Studio>选择目标数据库节点>打开上下文菜单>任务>导入数据

  • SQL Server集成服务>

  • 带有
    \T

  • T-SQL函数
    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/可以使用
    批量插入。做一些研究,试试看。如果需要帮助,请发布一些示例和代码