+ -
当前位置:首页 → 问答吧 → 120万数据分批导出成24个txt文件,每个5万条记录

120万数据分批导出成24个txt文件,每个5万条记录

时间:2011-11-08

来源:互联网

现有数据结构如下,共120万条记录
地市 id 号码
成都 102013930803 1898171
凉山 349900658468 1898153
宜宾 319027652344 1800810
成都 102006797673 1337810
成都 102013632037 1530804
攀枝花 125001121844 1333071
成都 102011126708 1334893
成都 102014739968 1530809

 需求如下:将号码随机排列后,把结果分别输出到24个txt,每个txt有5万个号码。

作者: yidianshuishui   发布时间: 2011-11-08

没人回?
MSSQL有没有skip?
结合first(top)

随机排列后, 是神码意思

作者: patrickkong   发布时间: 2011-11-08

用BCP導出吧,加上條件

作者: roy_88   发布时间: 2011-11-08

SQL code
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' 


這樣用語句分頁再導

作者: roy_88   发布时间: 2011-11-08

可以用导出向导做,在导出向导中可以设置筛选.

作者: qianjin036a   发布时间: 2011-11-08

按 id 降序排序,select top 5万 降序;select top 5万降序 ..(select top..10万 升序 ) ,以次导出

作者: xie4258   发布时间: 2011-11-08

引用 3 楼 roy_88 的回复:
SQL code
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'


這樣用語句分頁再導

我是想用带循环语句存储过程进行控制输出。

作者: yidianshuishui   发布时间: 2011-11-08

引用 6 楼 yidianshuishui 的回复:
引用 3 楼 roy_88 的回复:
SQL code
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'


這樣用語句分頁再導

我是想用带循环语句存储过程进行控制输出。
可以写个循环,拼字符串
SQL code
Select row_number() over(order by getdate()) no,* into #tb from dbname..tablename
while @i<24
  set @str='EXEC master..xp_cmdshell ''bcp "Select * from #tb where no 
between '+rtrim(@i)+' and '+rtrim((@i+1)*50000)+'" queryout c:\DT.txt'+rtrim(@i)+
 ' -c -Sservername -Usa -Ppassword'''
exec(@str)

作者: ssp2009   发布时间: 2011-11-08

将号码随机排列后
这个比较难。。。

作者: carter10004   发布时间: 2011-11-08

bcp就可以了。

作者: liangCK   发布时间: 2011-11-08

不要写成循环 不然的话慢死 还不如手工导24次

作者: fredrickhu   发布时间: 2011-11-08

bcp超快。

参考3F。

作者: claro   发布时间: 2011-11-08

引用 11 楼 claro 的回复:
bcp超快。

参考3F。

能给出具体的程序吗?

作者: yidianshuishui   发布时间: 2011-11-08

[Quote=引用 7 楼 ssp2009 的回复:]
引用 6 楼 yidianshuishui 的回复:
引用 3 楼 roy_88 的回复:
SQL code
DECLARE @i int,@str nvarchar(1000)
Select row_number() over(order by newid()) no,电话号码 into #tb from wmdx..scsilentuser where 地市 not in ('绵阳') order by 1
set @i=0
while @i<25
begin
  set @str='bcp "Select 电话号码 from #tb where rtrim(no) 
between '+rtrim(@i*50000+1)+' and '+rtrim((@i+1)*50000)+'
  " queryout e:\mobile\'+rtrim(@i)+'.txt -c -SLENOVO-PC -Usa -P858'
EXEC master..xp_cmdshell @str
  set @i=@i+1
end
我安装你提供的做法自己尝试了一下,还是没能做出结果来,望指教和提出程序问题所在
显示结果为:
用法: bcp {dbtable | query} {in | out | queryout | format} 数据文件
  [-m 最大错误数] [-f 格式化文件] [-e 错误文件]
  [-F 首行] [-L 末行] [-b 批大小]
  [-n 本机类型] [-c 字符类型] [-w 宽字符类型]
  [-N 将非文本保持为本机类型] [-V 文件格式版本] [-q 带引号的标识符]
  [-C 代码页说明符] [-t 字段终止符] [-r 行终止符]
  [-i 输入文件] [-o 输出文件] [-a 数据包大小]
  [-S 服务器名称] [-U 用户名] [-P 密码]

作者: yidianshuishui   发布时间: 2011-11-09