sql Server 批量插入以及sql Server数据导入到mysql sqlServer数据每10000条导出一个文件
2012-09-07 11:12
941 查看
1:sql Server平时接触不多,最近只是在上面造大量数据和导出使用了下
批量造几万条数据
假如一个表
CREATE TABLE [dbo].[userInfo] (
[userID] [int] IDENTITY (1, 1) NOT NULL ,
[roleType] [int] NULL ,
[groupID] [int] NULL ,
[userCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
而后进行大量数据插入
DECLARE @userCode VARCHAR(30)
DECLARE @userName VARCHAR(30)
DECLARE @userCode_base VARCHAR(30)
DECLARE @count INTEGER
DECLARE @index INTEGER
DECLARE @rand1 INTEGER
DECLARE @rand2 INTEGER
SET @userCode_base='qs_'
SET @userName='userName'
SET @count=100000
SET @index=10000
WHILE @index<@count
BEGIN
SET @userCode=@userCode_base+CONVERT(VARCHAR,@index)
SET @rand1=convert(int,rand()*5)
SET @rand2=convert(int,rand()*5)
INSERT INTO userInfo (userCode,roleType,groupID,userName,text1,text2,text3)
VALUES (@userCode,@rand1,@rand2,@userName,'aokei kaol jof','','aokei kaol jof')
SET @index=@index+1
END
GO
这些也是从其他同行那抄来的,顺便给自己一个便签记录下
2:最近还一个比较头疼的是sqlServer数据移植到mysql,数据少嘛还好办,关键丫的几十万上百万的数据,让我情何以堪,反正使用odbc数据源我是没搞定,网上也有好多牺牲的说法,我也没辙,就使用老土的先导出CSV,再导入到mysql,唉。。。关键在于,几十万上百万万一一下子导出错了那不就悲剧了,就想到每5万或者10万作为一个文件导出在那,再一个个导进去,这样毕竟降低点风险。这里又来了,怎么导出一个个文件呢,我去找找。。。。回来再补充。。。嘎嘎,不过我一次性导入了38万条了,导入的时候我就在那祈祷啊,千万不要出错,千万不要出错。
找了下还算找到个方法
首先最好建一张临时表吧,这样尽量不要操作原表数据,把原表数据复制到临时表,此时为了方便排序以及导出,加了一个字段id,就是这张临时表结构比原表多了个字段ID,里面放着序号,这样利于下面导出操作。
我例子呢,就是上面的userInfo的表,由于表中userid就是一个自增的字段,我暂且就用userid当作临时表的id
我就直接操作userInfo表
捣鼓半天,找到个靠谱的SQL:
declare @i int
declare @sqlstr nvarchar(1000)
set @i=0
while @i*10000<100*1000
begin
set @sqlstr='bcp "select top 10000 * from testdb.dbo.userInfo where userid>='+cast(@i*10000 as varchar(10))+' and userid<'+cast(@i*10000+10000 as varchar(10))+'" queryout "d:\test\'+cast(@i as varchar(10))+'.txt" -c -SServername -Uusername -Ppassword'
exec master.dbo.xp_cmdshell @sqlstr
set @i=@i+1
end
就是每一万条导出一个txt文件,执行中呢,报错‘SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问’,又找了下
EXEC sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'xp_cmdshell', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
修改下配置,
再执行,有戏,出来了。总算收到效果。
1 0
2 qs_10000
userName aokei kaol jofaokei kaol jof
2 0 1qs_10001userNameaokei kaol jofaokei
kaol jof
3 3 0qs_10002userNameaokei kaol jofaokei
kaol jof
4 3 3qs_10003userNameaokei kaol jofaokei
kaol jof
5 0 0qs_10004userNameaokei kaol jofaokei
kaol jof
截取的一段,就是没有逗号分隔的,导出CSV也是一样,后期处理吧,这样出来已经不错了。
这样是以制表符分隔每一个字段的,我又把表清空,再选择这个txt导入,导入时候到第二步映射的时候,映射到哪张表,后面编辑打开,勾选启用标识列插入”不然导入不进去。
这是将数据还原到sqlServer,下面试着就把这些txt导入到mysql \t 是制表符
mysql> load data infile 'd:/0.txt' into table user fields terminated by '\t' optionally
enclosed by '' lines terminated by '\r\n';
Query OK, 999 rows affected (0.06 sec)
Records: 999 Deleted: 0 Skipped: 0 Warnings: 0
OK,完成,还是可以导入的。
好了,这样一来,借助这种比较笨拙的方法,还是能够完成数据的导入导出,以及不同数据库之间的操作,sqlserver对Oracle是有数据源接口的,这个就不扯了。
批量造几万条数据
假如一个表
CREATE TABLE [dbo].[userInfo] (
[userID] [int] IDENTITY (1, 1) NOT NULL ,
[roleType] [int] NULL ,
[groupID] [int] NULL ,
[userCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[text3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
而后进行大量数据插入
DECLARE @userCode VARCHAR(30)
DECLARE @userName VARCHAR(30)
DECLARE @userCode_base VARCHAR(30)
DECLARE @count INTEGER
DECLARE @index INTEGER
DECLARE @rand1 INTEGER
DECLARE @rand2 INTEGER
SET @userCode_base='qs_'
SET @userName='userName'
SET @count=100000
SET @index=10000
WHILE @index<@count
BEGIN
SET @userCode=@userCode_base+CONVERT(VARCHAR,@index)
SET @rand1=convert(int,rand()*5)
SET @rand2=convert(int,rand()*5)
INSERT INTO userInfo (userCode,roleType,groupID,userName,text1,text2,text3)
VALUES (@userCode,@rand1,@rand2,@userName,'aokei kaol jof','','aokei kaol jof')
SET @index=@index+1
END
GO
这些也是从其他同行那抄来的,顺便给自己一个便签记录下
2:最近还一个比较头疼的是sqlServer数据移植到mysql,数据少嘛还好办,关键丫的几十万上百万的数据,让我情何以堪,反正使用odbc数据源我是没搞定,网上也有好多牺牲的说法,我也没辙,就使用老土的先导出CSV,再导入到mysql,唉。。。关键在于,几十万上百万万一一下子导出错了那不就悲剧了,就想到每5万或者10万作为一个文件导出在那,再一个个导进去,这样毕竟降低点风险。这里又来了,怎么导出一个个文件呢,我去找找。。。。回来再补充。。。嘎嘎,不过我一次性导入了38万条了,导入的时候我就在那祈祷啊,千万不要出错,千万不要出错。
找了下还算找到个方法
首先最好建一张临时表吧,这样尽量不要操作原表数据,把原表数据复制到临时表,此时为了方便排序以及导出,加了一个字段id,就是这张临时表结构比原表多了个字段ID,里面放着序号,这样利于下面导出操作。
我例子呢,就是上面的userInfo的表,由于表中userid就是一个自增的字段,我暂且就用userid当作临时表的id
我就直接操作userInfo表
捣鼓半天,找到个靠谱的SQL:
declare @i int
declare @sqlstr nvarchar(1000)
set @i=0
while @i*10000<100*1000
begin
set @sqlstr='bcp "select top 10000 * from testdb.dbo.userInfo where userid>='+cast(@i*10000 as varchar(10))+' and userid<'+cast(@i*10000+10000 as varchar(10))+'" queryout "d:\test\'+cast(@i as varchar(10))+'.txt" -c -SServername -Uusername -Ppassword'
exec master.dbo.xp_cmdshell @sqlstr
set @i=@i+1
end
就是每一万条导出一个txt文件,执行中呢,报错‘SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问’,又找了下
EXEC sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'xp_cmdshell', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
修改下配置,
再执行,有戏,出来了。总算收到效果。
1 0
2 qs_10000
userName aokei kaol jofaokei kaol jof
2 0 1qs_10001userNameaokei kaol jofaokei
kaol jof
3 3 0qs_10002userNameaokei kaol jofaokei
kaol jof
4 3 3qs_10003userNameaokei kaol jofaokei
kaol jof
5 0 0qs_10004userNameaokei kaol jofaokei
kaol jof
截取的一段,就是没有逗号分隔的,导出CSV也是一样,后期处理吧,这样出来已经不错了。
这样是以制表符分隔每一个字段的,我又把表清空,再选择这个txt导入,导入时候到第二步映射的时候,映射到哪张表,后面编辑打开,勾选启用标识列插入”不然导入不进去。
这是将数据还原到sqlServer,下面试着就把这些txt导入到mysql \t 是制表符
mysql> load data infile 'd:/0.txt' into table user fields terminated by '\t' optionally
enclosed by '' lines terminated by '\r\n';
Query OK, 999 rows affected (0.06 sec)
Records: 999 Deleted: 0 Skipped: 0 Warnings: 0
OK,完成,还是可以导入的。
好了,这样一来,借助这种比较笨拙的方法,还是能够完成数据的导入导出,以及不同数据库之间的操作,sqlserver对Oracle是有数据源接口的,这个就不扯了。
相关文章推荐
- MySQL(Navicat)运行.sql文件时报错:[Err] 2006 - MySQL server has gone away 的解决方法 背景: 今天导入一个数据量很大的.sql文件时,
- mysql导入导出sql文件备份还原数据…
- Mysql5.6版本导出sql文件数据导入到5.7版本出现的问题
- Mysql 快速插入批量数据,从文件中导入数据
- SQL Server中bcp命令的用法以及数据批量导入导出
- mysql导入导出sql文件 window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname >
- 在只有MySQL数据库的情况下,如何把SQL Server 数据脚本(.sql文件)导入Mysql的表中。
- postgresql以及mysql的数据导出导入到文件
- 在向navicat导入数据时,运行sql文件,报错首行信息提示:mysql server has gone away
- mysql 导入导出数据以及linux的文件 传递
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- SQL 数据的导入导出,对远程(MSsql,OracleAccess,)数据库的操作以及读取Excel,txt文件中的数据
- mysql导入导出表结构及表数据及执行sql文件
- mysql导入导出表结构及表数据及执行sql文件
- MySQL server has gone away,Mysql导入大容量SQL文件数据问题
- sql文件导入大批量数据时,报错:Lost connection to MySQL server during query
- SQL Server中bcp命令的用法以及数据批量导入导出
- SQL Server中bcp命令的用法以及数据批量导入导出
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- 【批量生成10万条sql数据库数据+IO流的使用】生成简单sql插入语句大量数据,以及输出流生成文件2017年