RICHEER COCA 2022-07-01 11:02 采纳率: 93.9%
浏览 56
已结题

如何自动平分生成50个表,请专家答疑解惑


--  执行脚本如果是一个表就会有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 
  • 写回答

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,生成插入脚本

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月11日
  • 已采纳回答 7月3日
  • 修改了问题 7月1日
  • 创建了问题 7月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