同一个存储过程中,不能多次select into 到同一张表的问题
来源:互联网 发布:linux rm -rf 命令撤回 编辑:程序博客网 时间:2024/05/21 16:54
表记录的插入方式有两种。其一,先create table 再 insert into from ...。其二, 直接 select into。
第一种方式,由于要记录日志,因此IO消耗更多,duration 更长。一般来说能用 select into 的,就尽量不要用 insert into的方式。
有时,存储过程中会需要,根据不同的条件,从不同的表中获取数据放入一个临时表。看起来,这样就需要在不同的分支语句中,写多个对同一张的 select into 语句。
例如:
if (@b=1)
begin
select a.id, a.name, b.price
into #temp
from A inner join B on (a.id=b.id)
end else if (@b=2)
begin
select d.id, d.name, c.price
into #temp
from D inner join C on (d.id=c.id)
end
但创建存储过程时会报错,说 #temp 表已经存在。
怎么解决呢?
方法一:用第一种方式,问题是性能差;
方法二:偷懒一些,但性能更好的方法
select a.id, a.name, b.price
into #tempA
from A inner join B on (@b=1 and a.id=b.id)
where @b=1
select d.id, d.name, c.price
into #tempB
from D inner join C on (@b=2 and d.id=c.id)
where @b=2
select *
into #temp
from ( select * from #tempA union all select * from #tempB )
方法三:用动态sql的办法,把所有的语句都拼接好。好处是性能比方法二好,但缺点也很明显,可读性不强;
方法四:其实,不同的功能,还是最好分成不同的存储过程,优化,维护都更简单。
不知道有没有更好的方式?
- 同一个存储过程中,不能多次select into 到同一张表的问题
- 把存储过程结果集SELECT INTO到临时表
- 把存储过程结果集SELECT INTO到临时表
- 在MySql中建立存储过程和解决insert into select 中主键冲突的问题
- 在存储过程中SELECT INTO的注意事项
- 关于VB6同一过程中不能第二次捕获到错误的问题
- mysql存储过程中使用select count(*) into 变量名 from +表+ where条件的用法
- mysql多次join同一张表的处理
- select into 临时表再使用过程中所遇到的问题和相应的解决方案
- 多次调用同一个过程效率下降的问题
- 存储过程insert into select
- oracle 存储过程中使用select 列 into 变量
- mysql多次调用存储过程的问题
- 数据块错误引起存储过程中select into的异常
- mysql update select 在同一张表的
- select into 到临时表中
- POSTGRESQL 存储过程 select into 和 insert into select 两种表复制语句之间的差别
- mybatis同一张表多次连接查询相同列赋值问题
- sencha touch 2 store传参 或者 url后附加参数
- ios NSAttributedString--从文章中标记高亮
- 求指导在javascript中动态添加表格中的行
- lifeix+json解析+关注
- cocos2d-x 获取平台类型
- 同一个存储过程中,不能多次select into 到同一张表的问题
- 使用GIT向内核提交patch
- 来博客的第一天
- Yum 使用教程
- HDU 1712 ACboy needs your help ----分组背包
- android代码签名机制有问题
- mosquitto的acl及用户配置
- ossec开源入侵检测系统安装配置
- mono for android调用webServer服务