11 个解决方案
#1
BULK INSERT tempdb..test
FROM 'E:\test.txt'
WITH (
FIELDTERMINATOR =',',--字段分割符号
ROWTERMINATOR ='n'--换行符号
)
#3
自增的问题,在表定义里面用Identity就可以了
#4
我反正不知道。遇到这种情况,有自增的表,都不直接bulk into,先bulk into一个没有自增ID的临时表(字段完全对应),再insert into 目标表 select ... from 临时表。
#5
id为自增id是什么意思,你的意思是txt中没有自增id的值,想在导入的时候,自动填充这个值,
还是在txt中有自增id的值,但是想把这个值插入到表中
还是在txt中有自增id的值,但是想把这个值插入到表中
#6
建议用openrowset:
把csv文件中的数据导入SQL Server的方法
http://blog.csdn.net/sqlserverdiscovery/article/details/12580553
把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
这个方法可以试试
#10
这个等会研究吧,好复杂的样子
#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的值,但是想把这个值插入到表中
还是在txt中有自增id的值,但是想把这个值插入到表中
#6
建议用openrowset:
把csv文件中的数据导入SQL Server的方法
http://blog.csdn.net/sqlserverdiscovery/article/details/12580553
把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
这个方法可以试试
#10
这个等会研究吧,好复杂的样子
#11
应先导入到中间表,然后再插入目标表.