【问题标题】:Ignore certain columns when using BULK INSERT使用 BULK INSERT 时忽略某些列
【发布时间】:2013-02-05 16:08:44
【问题描述】:

我有一个逗号分隔的文本文件,其结构

field1   field2   field3   field4
1        2        3        4

我编写了以下脚本来批量插入文本文件,但我想省略第 3 列

create table test (field1 varchar(50),field2 varchar(50),field4 varchar(50))
go
bulk insert test
from 'c:\myFilePath'
with 
(fieldterminator=',',
rowterminator='\n'
)

插入工作正常,但插入的结果使 field4 看起来像 field3,field4,所以字段 3 实际上只是连接到 field4 上。我正在使用的平面文件是几个演出,不能轻易修改。有没有办法使用批量插入,但忽略未在 create table 语句中声明的列?

【问题讨论】:

  • 首先,我尝试遵循 Charles Okwuagwu 的建议并使用要插入的列创建视图,但它不起作用。比我意识到视图中的列顺序必须与表中的相同。现在可以了。

标签: sql sql-server sql-server-2008 tsql bulkinsert


【解决方案1】:

您可以使用格式文件来执行此操作:

http://msdn.microsoft.com/en-gb/library/ms178129.aspx

http://msdn.microsoft.com/en-gb/library/ms179250.aspx

或者,如果您想要一种稍微厚颜无耻的方式,只需将其全部导入并在之后删除一列。 ;)

【讨论】:

  • 我使用的是 SQL Server 2008。
  • 我建议更厚脸皮的方式。
  • 你可以在所有版本的sql server中使用格式文件,我只是链接了我在google上找到的第一件事。我使用带有 SQL2000 的格式文件来导入产品数据并删除了大约一半的列。如果您愿意,我可以为您找到一些更具体的示例,或者使用您自己的 google-fu。
【解决方案2】:

最简单的方法是创建一个仅包含所需列的视图。

然后批量插入该视图。

例子:

create table people (name varchar(20) not null, dob date null, sex char(1) null)

--If you are importing only name from list of names in names.txt

create view vwNames as
select name from people

bulk insert 'names.txt'

【讨论】:

  • 我创建了一个包含单列的视图,但单列填充了文件中的所有列。我做错了什么?
  • @CodingYoshi 添加了一个例子
  • 感谢您的回复,但没有运气。我试过create table people (name varchar(20) not null, dob date null, sex char(1) null) create view vwNames as select name from people。然后bulk insert vwNames from 'names.txt' select name from vwNames 并返回该行的全部内容。我有 SQL Server 2012。
  • 这个想法是您的源文件中的列数比表中的少,您创建的视图与要导入的文件具有完全相同的列数。
  • 我明白了。但是,在问题中,OP 说他们想省略文本文件中的一列(准确地说是第 3 列)。另外,在您的示例中,您说If you are importing only name 意味着省略了一些列。如果表中的列少于文件,这将不起作用。无论如何,谢谢。
【解决方案3】:

在进行批量插入时,您不能忽略一个字段,因为这样做.. 加载所有 4 列并删除您不想要的列

create table test (field1 varchar(50),field2 varchar(50), field3 varchar(50),field4 varchar(50))
go
bulk insert test
from 'c:\myFilePath'
with 
(fieldterminator=',',
rowterminator='\n'
)

ALTER TABLE test DROP column [field3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2012-11-07
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2013-04-23
    相关资源
    最近更新 更多