Sql server 在SQL Server中加载大文本文件

Sql server 在SQL Server中加载大文本文件,sql-server,flat-file,Sql Server,Flat File,我想加载一个非常大的文件,3GB的文本(不是逗号分隔的)只是一个文本,这样文本中的每一行都成为一条记录 我的桌子结构应该是这样的 可加载 ID bigint标识 TLine varchar(最大值) 我尝试使用SQL任务导入数据,但总是出现此错误 执行(错误)消息错误0xc02020a1:数据流任务1:数据转换失败。返回了列“0”的数据转换 状态值4和状态文本“文本被截断或一个或多个 目标代码页中的字符不匹配。“。(SQL Server导入 和导出向导) 错误0xc020902a:数据流任务

我想加载一个非常大的文件,3GB的文本(不是逗号分隔的)只是一个文本,这样文本中的每一行都成为一条记录

我的桌子结构应该是这样的

可加载 ID bigint标识 TLine varchar(最大值)

我尝试使用SQL任务导入数据,但总是出现此错误

  • 执行(错误)消息错误0xc02020a1:数据流任务1:数据转换失败。返回了列“0”的数据转换 状态值4和状态文本“文本被截断或一个或多个 目标代码页中的字符不匹配。“。(SQL Server导入 和导出向导)
错误0xc020902a:数据流任务1:源- NOTEEVENTS_csv.Outputs[平面文件源输出]。列[列0]“ 失败,因为发生了截断,并且截断行已被删除 在“Source-NOTEEVENTS\u csv.Outputs[平面文件源 输出].Columns[Column 0]”指定截断失败。A. 指定对象的指定对象上发生截断错误 组成部分。(SQL Server导入和导出向导)

错误0xc0202092:数据流任务1:处理时出错 上的文件“E:\MyFile.txt” 数据行1。(SQL Server导入和导出向导)

错误0xc0047038:数据流任务1:SSIS错误代码 DTS_E_PrimeOutput失败。源上的PrimeOutput方法- NOTEEVENTS\u csv返回错误代码0xC0202092。组件返回 管道引擎调用PrimeOutput()时出现故障代码。这个 故障代码的含义由组件定义,但错误 是致命的,管道已停止执行。可能有错误 在此之前发布的消息包含有关故障的更多信息。 (SQL Server导入和导出向导)


如何修复此错误并将每一行作为ID显示行顺序的记录加载?

VARCHAR(最大)列(行)的最大存储大小为2Gb:

varchar[(n | max)]可变大小字符串数据。使用n来定义 字符串大小(以字节为单位),可以是1到8000之间的值,也可以使用 最大值表示列约束大小最大存储空间 2^31-1字节(2 GB)


(出于演示目的,我使用了)

您可以运行批量插入查询,而不是在SSMS中使用用户界面,如下所示:

SELECT
    ROW_NUMBER() over (ORDER BY (SELECT NULL)) ROW_NR
    , *
INTO MyTable
FROM OPENROWSET
    (BULK N'C:\..\Desktop\big.txt', FORMATFILE=N'C:\..\Desktop\big_format_file.xml') tmp
但是,您需要先做几件事:

  • 创建,以指定格式(类似于为平面文件导入指定行终止符、列终止符)。(在我的答案底部,这是一个生成此文件的简单解决方法)

    我选择创建一个.XML文件格式,因为它更易于阅读。此文件的内容是:

  • 
    
    尽管这是一个示例文档,但请确保终止符选项已设置了您希望用作行分隔符的正确终止符

  • 之后,您可以运行上面的查询,将数据导入
    MyTable

    从现在开始,您可以使用SELECT INTO将信息持久化到新表中,使用INSERT将新行添加到现有表中,甚至使用UPDATE将列更新到现有表中

  • 在我的例子中,
    MyTable
    的内容如下所示:


    创建格式文件的一个简单解决方法是在数据库中创建一个表,您希望输入数据具有的结构是:

  • 使用结构/定义创建虚拟表(例如:大批量)
  • 创建表格大容量(txt varchar(最大))

  • 运行BCP命令生成此表的文件格式:
  • bcp test.dbo.big\u批量格式nul-c-x-f。\Desktop\big\u格式\u file.xml-t,-t

    上面bcp命令中的-t参数指定行分隔符。可以将逗号(“,”)替换为“\t”或“\r”或其他字符

  • 编辑XML文件并确保设置了正确的行终止符/分隔符

  • 使用
    OPENROWSET()查询中的文件格式