关于数据迁移sql,求分析解答
最近上级给了个数据迁移任务下来,迁移共5个表,每个表都有关联,查询sql语句已经写好了,大概是这样的,查找A表数据into临时表1,查找临时表1数据筛选后into临时表2,查找临时表2数据筛选后into临时表3......一种层级的像子查询的查询方式,经过N次查询后,最后5个临时表都是我需要用到的,我想查到这5个临时表的记录条数。这是第1种情况的查询方法,共有3种情况。我需要汇总,5个表在这3种情况中各自的数据总和,例如情况1的临时表10和情况2的临时表6是同一个表的,因此要汇总其记录数,5个表的汇总数作为前台显示正在迁移哪个表,多少条显示。
还有更麻烦的是迁移时的insert语句,因此需要找到where条件,虽然说前面查找语句已经找到需要迁移的记录,但那只是临时表,而现在的系统每操作一次数据库就关闭连接,所以临时表肯定没了。但我不想把如此庞大的查询语句直接当作是where条件,所以希望有更好的办法。
我目前只想到把临时表换成嵌套形式,不过这样就会嵌套很多个表在子查询,可能会影响效率,然后把三种情况的表整合成一个表,这样就有5个汇总表,即可以作为查找记录数的表,也可以作为条件的表。
------解决方案--------------------查找A表数据into临时表1,查找临时表1数据筛选后into临时表2,查找临时表2数据筛选后into临时表3.
既然经过一次查询后,再次筛选可以进入临时表2,为什么不可以一次筛选直接进入临时表2 ?
根据你提供的信息,临时表5都可以一次性筛选数据.
这样你做数据迁移时就只需要移动原表就行了
------解决方案--------------------
难道不能用查询分析器吗?或者用DTS?
------解决方案--------------------我不想把如此庞大的查询语句直接当作是where条件,所以希望有更好的办法。
----------->可以把复杂的sql语句改建为视图.
现在的系统每操作一次数据库就关闭连接,所以临时表肯定没了。
------------>临时表改为实体表
------解决方案--------------------建议将迁移过程写成存储过程,前端程序调用执行存储过程即可.
同时也解决了临时表的问题.
------解决方案--------------------#1.简化SQL,合并临时表等查询
#2.封装成存储过程调用。为什么不想用存储过程?如果是因为保密因素的话,可以加密存储过程;不写成存储过程也行,那就全部用SQL,只不过代码长点儿而已
#3.效率问题,和解决方案无关。看你的SQL如何写,及你的处理逻辑是否可优化。
------解决方案--------------------这也成了规范。。你又不涉及跨DB兼容,这规范留着珍藏??
按正确的方法办事是正道,规范是人定的
------解决方案--------------------把库备份还原,然后删除不要的表,这个说不定更快
------解决方案--------------------但是对数据库的这种层面上的操作无论创建界面操作的功能还是你后台做,都不应该对客户透露太多。
------解决方案--------------------如果你的表有关联,那最好用外键的级联功能