Sql server 将CSV文件导入SQL server时操作停止

Sql server 将CSV文件导入SQL server时操作停止,sql-server,csv,Sql Server,Csv,我正在尝试将CSV文件导入SQL server数据库,但未成功。我还是sql server的新手 操作已停止 初始化数据流任务(成功) 初始化连接(成功) 设置SQL命令(成功) 设置源连接(成功) 设置目标连接(成功) 验证(成功) 信息 警告0x80049304:数据流任务1:警告:无法打开全局共享内存与性能DLL通信;数据流性能计数器不可用。要解决此问题,请以管理员身份或在系统控制台上运行此程序包。 (SQL Server导入和导出向导) 准备执行(成功) 预执行(成功

我正在尝试将CSV文件导入SQL server数据库,但未成功。我还是sql server的新手

操作已停止

  • 初始化数据流任务(成功)

  • 初始化连接(成功)

  • 设置SQL命令(成功)

  • 设置源连接(成功)

  • 设置目标连接(成功)

  • 验证(成功) 信息

    • 警告0x80049304:数据流任务1:警告:无法打开全局共享内存与性能DLL通信;数据流性能计数器不可用。要解决此问题,请以管理员身份或在系统控制台上运行此程序包。 (SQL Server导入和导出向导)
  • 准备执行(成功)

  • 预执行(成功) 信息

    • 信息0x402090dc:数据流任务1:已开始处理文件“D:\test.csv”。 (SQL Server导入和导出向导)
  • 执行(错误) 信息

    • 错误0xc002f210:删除表SQL任务1:执行查询“删除表[dbo]”。[测试] 失败,出现以下错误:“无法删除表'dbo.test',因为它不存在或您没有权限。”。可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接建立不正确。 (SQL Server导入和导出向导)

    • 错误0xc02020a1:数据流任务1:数据转换失败。“Code”列的数据转换返回状态值4和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配”。 (SQL Server导入和导出向导)

    • 错误0xc020902a:数据流任务1:“输出列”“代码”“(38)”由于发生截断而失败,“输出列”“代码”“(38)”上的截断行处置指定截断失败。在指定组件的指定对象上发生截断错误。 (SQL Server导入和导出向导)

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

    • 错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。组件“Source-test_csv”(1)上的PrimeOutput方法返回错误代码0xC0202092。当管道引擎调用PrimeOutput()时,组件返回了故障代码。故障代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关故障的更多信息。 (SQL Server导入和导出向导)

  • 复制到[dbo].[test](已停止)

  • 执行后(成功) 信息

    • 信息0x402090dd:数据流任务1:文件“D:\test.csv”的处理已结束。 (SQL Server导入和导出向导)

    • 信息0x402090df:数据流任务1:已开始在“组件”目标-测试“(70)”中插入数据的最终提交。 (SQL Server导入和导出向导)

    • 信息0x402090e0:数据流任务1:在“组件”目标-测试“(70)”中插入数据的最终提交已结束。 (SQL Server导入和导出向导)

    • 信息0x4004300b:数据流任务1:“组件”目标-测试(70)写入了0行。 (SQL Server导入和导出向导)


在导入过程中确实存在两个主要问题:

错误0xc002f210:删除表SQL 任务1:执行查询“删除” 表[dbo].[test]”失败,错误为 以下错误:“无法删除 表“dbo.test”,因为它没有 存在或您没有权限。“

看起来你想扔掉一张根本不存在的桌子。解决方案:不要这样做

错误0xc02020a1:数据流任务1: 数据转换失败。数据 列“代码”的转换 返回的状态值4和状态 文本“文本被截断或一个或多个 更多的角色在游戏中不匹配 目标代码页。“

列“Code”显然比目标表中的结果列长。检查映射-可能这是一个很长的字符串,并且SQL Server中VARCHAR列的默认长度太小。将目标列的数据类型更改为,例如,
VARCHAR(MAX)
——这将为您提供2 GB的空间!这应该足够了

另外,“代码”列似乎包含SQL Server中当前所选代码页中不存在的字符-在导入之前,您可以去掉这些额外的特殊字符吗?如果没有,您可能需要对目标列的数据类型使用
NVARCHAR(MAX)
,以便允许它对其字符使用Unicode(从而支持输入字符串中最奇特的字符)

“文本被截断或一个或多个 目标中没有匹配的字符 代码页。“

即使在以下情况下也可能发生:

  • 源平面文件是一个UNICODE文件

  • 您的目标列定义为nvarchar(max)
我花了一段时间才弄明白

原因

SSIS通过扫描前N行并进行有根据的猜测来推断源文件中的数据类型。由于无休止地重复尝试使其工作,它将数据类型(OutputColumnWidth)的元数据停在了某个地方,导致包内部的截断

分辨率

处理数据源的“高级”选项卡中的元数据就是解决问题的方法。尝试通过玩“建议类型”中的设置或调整setti来重置整个设置
Error 0xc02020a1: Data Flow Task 1: Data conversion failed. The data conversion for column "target" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".