【问题标题】:import delimited file to sql server 2008将分隔文件导入 sql server 2008
【发布时间】:2011-11-11 19:30:24
【问题描述】:

我正在尝试将管道分隔文件导入到 sql server 2008。最后一列很长,所以应该是 varchar(max) 或 text。

我正在使用导入向导。我已将源设置为平面文件,将目标设置为 Sql Native Client。

我已设置“第一个数据行中的列名”。

向导正确地读取了列名,但它想让每一列都变成 varchar(50)。我在向导中找到了一个高级选项卡,我可以在其中设置数据类型,但它似乎只设置数据流的类型而不是目标表?几个对话框之后我可以“编辑映射”,它可以让我将源列映射到目标列,并设置目标列是否可以为空,但它不允许我设置目标列的数据类型。

无论如何,我很困惑。是否可以使用向导导入超过 50 个字符的数据?因为它似乎不想让我。

【问题讨论】:

  • 目标表是否已经存在或者您是否让向导创建它?
  • 我让向导创建目标表
  • 是否可以删除文件的第一行,手动输入列名,然后重试?我想知道向导是否试图根据标题行猜测列大小 - 我一直发现 SQL Server 中的导入向导非常不稳定。

标签: sql-server-2008 ssms


【解决方案1】:

您是否尝试将数据源列的数据类型设置为text stream [DT_TEXT]

当我对此进行测试时,它在text 类型的目标表中创建了一个列。

编辑:

但是,如果您不想使用已弃用的数据类型创建表(请参阅下面的评论),我建议您先创建表,然后使用BULK INSERT

CREATE TABLE ImportTest (ID INT, Name VARCHAR(50), Description VARCHAR(MAX)) 
GO

BULK INSERT ImportTest
   FROM 'C:\Download\ImportTest.txt'
   WITH 
      (
         FIELDTERMINATOR ='|',
         ROWTERMINATOR ='\n',
         FIRSTROW = 2           -- Skip the header row
      )

【讨论】:

【解决方案2】:

您几乎可以使用“编辑映射”设置。 “创建目标表”单选按钮对面有一个“编辑 SQL”。但是我通常发现向导的其余部分仍然没有更新以反映您编辑的 SQL。

在这种情况下,我通常会在启动向导之前手动创建包含适当列、可空性等的表。

【讨论】:

  • 有趣的是,我的那个按钮是灰色的。我最终手动创建了表并编写了一个批量插入,这花费了非常少的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2018-07-23
相关资源
最近更新 更多