sql Server 批量插入以及sql Server数据导入到mysql sqlServer数据每10000条导出一个文件
来源:互联网 发布:剑灵最美2017捏脸数据 编辑:程序博客网 时间:2024/05/28 20:20
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是有数据源接口的,这个就不扯了。
- sql Server 批量插入以及sql Server数据导入到mysql sqlServer数据每10000条导出一个文件
- 【SQL Server】批量数据导入到数据库
- sql server 导入导出数据到execl
- [SQL Server] 批量插入数据
- 【SQL Server 批量插入数据】
- [SQL Server]SQLServer 批量插入数据的两种方法
- SQL Server 数据导入导出
- SQL SERVER数据导入导出
- SQL Server导入导出数据
- 使用SqlBulkCopy批量快速插入大量数据到SQL SERVER
- C#批量插入大数据到SQL server
- 利用SqlBulkCopy类 批量导入数据到sql server
- 利用SqlBulkCopy类 批量导入数据到sql server
- SQL Server 2008将数据导出到SQL脚本文件
- SQL Server 2008将数据导出到SQL脚本文件
- SQL Server 2008将数据导出到SQL脚本文件
- SQL SERVER 批量数据插入方法
- SQL Server 批量插入数据的方法
- JQuery获取和设置Select选项常用方法总结 .
- 无法将顶级控件添加到控件
- 人生没有配角
- 探秘:微软的免费杀毒软件Morro到底有何本领?
- Oracle 11.2.0.1客户端导出Oracle 11.2.0.2数据库时有分区表的分区段错误问题解决方案
- sql Server 批量插入以及sql Server数据导入到mysql sqlServer数据每10000条导出一个文件
- paip.flex or Silverlight
- android中LayoutInflater的3种使用以及getSystemService的API
- 文件上传下载PHP代码实现
- workqueue
- HDU 1106 排序
- C语言中strtok函数进行分割字符串!
- python 之 thread
- KindEditor Html编辑器的配置实例