-- 执行脚本如果是一个表就会有184,756行结果,问题:如何自动平分生成50个表,请专家答疑解惑
;WITH t AS
(
SELECT TOP 20 rn=ROW_NUMBER()OVER(ORDER BY @@spid)
FROM sysobjects
)
SELECT [ID]=Identity(INT,1,1),concat_ws(' ',a.rn,b.rn,c.rn,d.rn,e.rn,f.rn,g.rn,h.rn ,i.rn,j.rn) as notext
INTO [#tb66]
FROM T a
JOIN t b ON a.rn<b.rn
JOIN t c ON b.rn<c.rn
JOIN t d ON c.rn<d.rn
JOIN t e ON d.rn<e.rn
JOIN t f ON e.rn<f.rn
JOIN t g ON f.rn<g.rn
JOIN t h ON g.rn<h.rn
JOIN t i ON h.rn<i.rn
JOIN t j ON i.rn<j.rn
如何自动平分生成50个表,请专家答疑解惑
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- shinger126 2022-07-01 11:47关注
declare @i int,@k int
declare @sql nvarchar(max)
select @i=count()/50+1 from #tb66
set @k=0
while @k<50
begin
select min(id),max(id) from #tb66
where id between @i@k+1 and @i*(@k+1)
set @k=@k+1
end
每个表的最小ID和最大ID给你算出来了,至于怎么弄到50个表里面,在循环内用动态语句去处理就好
不用循环也可以。
declare @i int
declare @sql nvarchar(max)
select @i=count()/50+1 from #tb66
select 'insert into table'+left(number+1,2)+' from #tb66
where id between '+ left( number@i+1,10)+' and '+ left((number+1)*@i,10)
from master..spt_values where type='P' and number between 0 and 49
同样能求出来最小ID和最大ID,分组为NUMBER+1,生成插入脚本本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan