sql server 存储过程 从一张表导出数据到多张表

时间:2022-12-13 07:43:05
    从一张只知道表名的表里(假定为主表T)导出数据到多张表(假定从表T_0,T_1,T_2,.....),主表里的主键自增,但id不一定是连续的,每次导出数据都是一定的。比如主表数据有100w数据,每次转出10w条到从表里,从表要重新设置主键自增(从表一的id是1-100000,表2  100000-200000,依次。。。)转出数据后删除主表已转出数据。
  已有资料:1.根据表名获取从表历史转入表名(数据已经转到哪张从表)的存储过程:
   sql server 存储过程 从一张表导出数据到多张表

2.根据历史表名获取这是第几张从表
sql server 存储过程 从一张表导出数据到多张表

我已经写了一些了,但是总是出错,求指点
[/img] sql server 存储过程 从一张表导出数据到多张表

sql server 存储过程 从一张表导出数据到多张表
 


4 个解决方案

#1


你这样情况不时直接用分区表,按分区处理不用这么麻烦,导出又删除

按以下方式 改
表名最好定义长度

如:T_2,T_11你用NAME DESC取出来的表名不对

固定长度,用T_001/T_01格式

导入时直接这样用

select * into 新表  from 源表 where 1=2

delete 源表 output deleted.*  into 新表 where ID ....--条件

#2


 前面那两个存储过程 我测试过的 ,都能用 ,比如如果T表还没有分表,就建立T_0,其次T_1,T_2.....,然后可以获取已经传到了第几张表,也就可以获得已经传了(每次传出数量*表的数量)条数据,就可以判断下张表ID从哪里开始。

#3



现在遇到的问题是怎么把主表里的前1w条数据传到从表里,同时保证从表ID是自增(1-10000,10001-20000....)
zzselect * into 新表  from 源表 where 1=2,这句话只能把表结构复制过去,但是自增问题该怎么解决呢?

#4





引用 3 楼 wangjing2517 的回复:
现在遇到的问题是怎么把主表里的前1w条数据传到从表里,同时保证从表ID是自增(1-10000,10001-20000....)
zzselect * into 新表  from 源表 where 1=2,这句话只能把表结构复制过去,但是自增问题该怎么解决呢?


这个自增问题,可以考虑这样处理:

select (select max(id) from 你要插入数据的表)+ row_number() over(order by getdate()) ,其他字段 from xx

#1


你这样情况不时直接用分区表,按分区处理不用这么麻烦,导出又删除

按以下方式 改
表名最好定义长度

如:T_2,T_11你用NAME DESC取出来的表名不对

固定长度,用T_001/T_01格式

导入时直接这样用

select * into 新表  from 源表 where 1=2

delete 源表 output deleted.*  into 新表 where ID ....--条件

#2


 前面那两个存储过程 我测试过的 ,都能用 ,比如如果T表还没有分表,就建立T_0,其次T_1,T_2.....,然后可以获取已经传到了第几张表,也就可以获得已经传了(每次传出数量*表的数量)条数据,就可以判断下张表ID从哪里开始。

#3



现在遇到的问题是怎么把主表里的前1w条数据传到从表里,同时保证从表ID是自增(1-10000,10001-20000....)
zzselect * into 新表  from 源表 where 1=2,这句话只能把表结构复制过去,但是自增问题该怎么解决呢?

#4





引用 3 楼 wangjing2517 的回复:
现在遇到的问题是怎么把主表里的前1w条数据传到从表里,同时保证从表ID是自增(1-10000,10001-20000....)
zzselect * into 新表  from 源表 where 1=2,这句话只能把表结构复制过去,但是自增问题该怎么解决呢?


这个自增问题,可以考虑这样处理:

select (select max(id) from 你要插入数据的表)+ row_number() over(order by getdate()) ,其他字段 from xx