利用bulk into 把TXT文件的内容导入SQL server,id为自增长,TXT中的数据该怎么写

时间:2021-03-22 00:40:22
利用bulk into 把TXT文件的内容导入SQL server,id为自增长,TXT中的数据该怎么写?急急急!

11 个解决方案

#1


BULK INSERT tempdb..test 

  FROM 'E:\test.txt' 

  WITH ( 

  FIELDTERMINATOR =',',--字段分割符号 

  ROWTERMINATOR ='n'--换行符号 

  )

#2


这里有类似的例子: http://q.cnblogs.com/q/37346/

#3


自增的问题,在表定义里面用Identity就可以了

#4


我反正不知道。遇到这种情况,有自增的表,都不直接bulk into,先bulk into一个没有自增ID的临时表(字段完全对应),再insert into 目标表 select ... from 临时表。

#5


id为自增id是什么意思,你的意思是txt中没有自增id的值,想在导入的时候,自动填充这个值,

还是在txt中有自增id的值,但是想把这个值插入到表中

#6


建议用openrowset:

把csv文件中的数据导入SQL Server的方法
http://blog.csdn.net/sqlserverdiscovery/article/details/12580553

#7


这个是代码,因为你的是txt文件,而代码中是csv格式,所以你得稍微修改一下:

--1.修改系统参数
--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

sp_configure 'xp_cmdshell',1
go
reconfigure
go


--2.创建数据库
create database wc 
go


use wc
go


--3.建表
create table xxdd
(
aa nvarchar(1000),
bb nvarchar(1000),
cc nvarchar(1000),
dd nvarchar(1000),
ee nvarchar(1000),
ff nvarchar(1000)
)
go



--4.导出格式文件,这个是关键,数据库名称,表名称,用户名和密码,服务器ip和端口
--都改成你自己的
exec xp_cmdshell 'bcp wc.dbo.xxdd format nul -t "," -f c:\wc.fmt -c -Usa -Pyupeigu -S 192.168.1.106,1433'
go


--5.
/* 这里建立一个c:\wc.csv  文件,内容如下:
aa,bb,cc,dd,ee,ff
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432

*/



--6.先查看要导入的数据
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 

/*
aa bb cc dd ee ff
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
*/



--7.最后可以 insert into 表 (列)  select * from openrowset...插入数据即可
insert into xxdd (aa,bb,cc,dd,ee,ff)
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 



--8.插入数据后,查询数据
select *
from xxdd

#8


2楼的方法我也试过,不行,哪个连接我也看过

#9


引用 4 楼 spiritofdragon 的回复:
我反正不知道。遇到这种情况,有自增的表,都不直接bulk into,先bulk into一个没有自增ID的临时表(字段完全对应),再insert into 目标表 select ... from 临时表。



这个方法可以试试

#10


引用 7 楼 yupeigu 的回复:
这个是代码,因为你的是txt文件,而代码中是csv格式,所以你得稍微修改一下:

--1.修改系统参数
--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

sp_configure 'xp_cmdshell',1
go
reconfigure
go


--2.创建数据库
create database wc 
go


use wc
go


--3.建表
create table xxdd
(
aa nvarchar(1000),
bb nvarchar(1000),
cc nvarchar(1000),
dd nvarchar(1000),
ee nvarchar(1000),
ff nvarchar(1000)
)
go



--4.导出格式文件,这个是关键,数据库名称,表名称,用户名和密码,服务器ip和端口
--都改成你自己的
exec xp_cmdshell 'bcp wc.dbo.xxdd format nul -t "," -f c:\wc.fmt -c -Usa -Pyupeigu -S 192.168.1.106,1433'
go


--5.
/* 这里建立一个c:\wc.csv  文件,内容如下:
aa,bb,cc,dd,ee,ff
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432

*/



--6.先查看要导入的数据
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 

/*
aa bb cc dd ee ff
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
*/



--7.最后可以 insert into 表 (列)  select * from openrowset...插入数据即可
insert into xxdd (aa,bb,cc,dd,ee,ff)
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 



--8.插入数据后,查询数据
select *
from xxdd



这个等会研究吧,好复杂的样子

#11


应先导入到中间表,然后再插入目标表.

#1


BULK INSERT tempdb..test 

  FROM 'E:\test.txt' 

  WITH ( 

  FIELDTERMINATOR =',',--字段分割符号 

  ROWTERMINATOR ='n'--换行符号 

  )

#2


这里有类似的例子: http://q.cnblogs.com/q/37346/

#3


自增的问题,在表定义里面用Identity就可以了

#4


我反正不知道。遇到这种情况,有自增的表,都不直接bulk into,先bulk into一个没有自增ID的临时表(字段完全对应),再insert into 目标表 select ... from 临时表。

#5


id为自增id是什么意思,你的意思是txt中没有自增id的值,想在导入的时候,自动填充这个值,

还是在txt中有自增id的值,但是想把这个值插入到表中

#6


建议用openrowset:

把csv文件中的数据导入SQL Server的方法
http://blog.csdn.net/sqlserverdiscovery/article/details/12580553

#7


这个是代码,因为你的是txt文件,而代码中是csv格式,所以你得稍微修改一下:

--1.修改系统参数
--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

sp_configure 'xp_cmdshell',1
go
reconfigure
go


--2.创建数据库
create database wc 
go


use wc
go


--3.建表
create table xxdd
(
aa nvarchar(1000),
bb nvarchar(1000),
cc nvarchar(1000),
dd nvarchar(1000),
ee nvarchar(1000),
ff nvarchar(1000)
)
go



--4.导出格式文件,这个是关键,数据库名称,表名称,用户名和密码,服务器ip和端口
--都改成你自己的
exec xp_cmdshell 'bcp wc.dbo.xxdd format nul -t "," -f c:\wc.fmt -c -Usa -Pyupeigu -S 192.168.1.106,1433'
go


--5.
/* 这里建立一个c:\wc.csv  文件,内容如下:
aa,bb,cc,dd,ee,ff
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432

*/



--6.先查看要导入的数据
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 

/*
aa bb cc dd ee ff
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
*/



--7.最后可以 insert into 表 (列)  select * from openrowset...插入数据即可
insert into xxdd (aa,bb,cc,dd,ee,ff)
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 



--8.插入数据后,查询数据
select *
from xxdd

#8


2楼的方法我也试过,不行,哪个连接我也看过

#9


引用 4 楼 spiritofdragon 的回复:
我反正不知道。遇到这种情况,有自增的表,都不直接bulk into,先bulk into一个没有自增ID的临时表(字段完全对应),再insert into 目标表 select ... from 临时表。



这个方法可以试试

#10


引用 7 楼 yupeigu 的回复:
这个是代码,因为你的是txt文件,而代码中是csv格式,所以你得稍微修改一下:

--1.修改系统参数
--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

sp_configure 'xp_cmdshell',1
go
reconfigure
go


--2.创建数据库
create database wc 
go


use wc
go


--3.建表
create table xxdd
(
aa nvarchar(1000),
bb nvarchar(1000),
cc nvarchar(1000),
dd nvarchar(1000),
ee nvarchar(1000),
ff nvarchar(1000)
)
go



--4.导出格式文件,这个是关键,数据库名称,表名称,用户名和密码,服务器ip和端口
--都改成你自己的
exec xp_cmdshell 'bcp wc.dbo.xxdd format nul -t "," -f c:\wc.fmt -c -Usa -Pyupeigu -S 192.168.1.106,1433'
go


--5.
/* 这里建立一个c:\wc.csv  文件,内容如下:
aa,bb,cc,dd,ee,ff
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432
42222222223432432432,32432432432432432432,2332432432,32432432432,32432432,23432432

*/



--6.先查看要导入的数据
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 

/*
aa bb cc dd ee ff
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
42222222223432432432 32432432432432432432 2332432432 32432432432 32432432 23432432
*/



--7.最后可以 insert into 表 (列)  select * from openrowset...插入数据即可
insert into xxdd (aa,bb,cc,dd,ee,ff)
select *
from 
openrowset(bulk 'c:\wc.csv',             --要读取的文件路径和名称 
                formatfile='c:\wc.fmt',  --格式化文件的路径和名称
                
                firstrow = 2,            --要载入的第一行,由于第一行是标题,所以从2开始
                --lastrow  = 1000,       --要载入的最后一行,此值必须大于firstrow
                
                maxerrors = 10,          --在加载失败之前加载操作中最大的错误数
                --errorfile ='c:\wc_error1.txt', --存放错误的文件
                
                rows_per_batch = 10000                    --每个批处理导入的行数
          ) as t 



--8.插入数据后,查询数据
select *
from xxdd



这个等会研究吧,好复杂的样子

#11


应先导入到中间表,然后再插入目标表.