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

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

需求如下:将号码随机排列后,把结果分别输出到24个txt,每个txt有5万个号码。
...全文
211 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yidianshuishui 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 luckyrandom 的回复:]

先隨機排好序,再分割為24個文件,再導出為.txt即可
[/Quote]
请问用程序怎么实现分割?怎么实现导出?
Q315054403 2011-11-09
  • 打赏
  • 举报
回复
先隨機排好序,再分割為24個文件,再導出為.txt即可
中国风 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yidianshuishui 的回复:]

引用 14 楼 luckyrandom 的回复:

先隨機排好序,再分割為24個文件,再導出為.txt即可

请问用程序怎么实现分割?怎么实现导出?
[/Quote]
用這選項試試
[-Ffirst_row] [-Llast_row]

BCP "SELECT * FROM dbName.dbo.tableName" queryout c:/User.txt -F 50000 -L 100000-c -U"sa" -P"password" --第50000条到10000条记录

yidianshuishui 2011-11-09
  • 打赏
  • 举报
回复
[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-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 claro 的回复:]
bcp超快。

参考3F。
[/Quote]
能给出具体的程序吗?
claro 2011-11-08
  • 打赏
  • 举报
回复
bcp超快。

参考3F。
--小F-- 2011-11-08
  • 打赏
  • 举报
回复
不要写成循环 不然的话慢死 还不如手工导24次
liangCK 2011-11-08
  • 打赏
  • 举报
回复
bcp就可以了。
carter10004 2011-11-08
  • 打赏
  • 举报
回复
将号码随机排列后
这个比较难。。。
快溜 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yidianshuishui 的回复:]
引用 3 楼 roy_88 的回复:
SQL code
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'


這樣用語句分頁再導

我是想用带循环语句存储过程进行控制输出。
[/Quote]可以写个循环,拼字符串
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)
yidianshuishui 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]
SQL code
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'


這樣用語句分頁再導
[/Quote]
我是想用带循环语句存储过程进行控制输出。
xie4258 2011-11-08
  • 打赏
  • 举报
回复
按 id 降序排序,select top 5万 降序;select top 5万降序 ..(select top..10万 升序 ) ,以次导出
-晴天 2011-11-08
  • 打赏
  • 举报
回复
可以用导出向导做,在导出向导中可以设置筛选.
中国风 2011-11-08
  • 打赏
  • 举报
回复
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' 


這樣用語句分頁再導
中国风 2011-11-08
  • 打赏
  • 举报
回复
用BCP導出吧,加上條件
  • 打赏
  • 举报
回复
没人回?
MSSQL有没有skip?
结合first(top)

随机排列后, 是神码意思

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧