hur.cn - 华软网

 热门搜索

100分!!!数据窗口调用sybase存储过程,数据窗口对象都能够检索出数据,但运行程序时报错!!!!!

  作者:未知    来源:网络    更新时间:2018/5/16
数据窗口调用sybase的存储过程(存储过程中有创建临时表的语句),数据窗口对象都能够检索出数据,但运行程序时报错!!!!!

报错内容:"select error:the 'CREATE TABLE' commands is not allowed with a multi_statement transaction in the 'tempdb' database"

请高手指点,这是那个地方设置不对还是什么原因?

------华软网友回答------
把过程粘到网上

------华软网友回复------
这就是过程的原代码,主要是作日报表统计格式是这样的。

货种,原库存件数,原库存重量,当日进库件数,当日进库重量,当日出库件数,当日出库重量,结存件数,结存重量

总共9列,由于数据不来自一张表,所以用了临时表

create procedure goods_in_out_veryday_report
@date datetime
as

declare  @start_date datetime ,@end_date datetime 

select  @start_date = convert(datetime,substring(convert(char(8),@date,112),1,8) +' 00:00:00'),
 @end_date = convert(datetime,substring(convert(char(8),@date,112),1,8) +' 23:59:59')
 
create table #tmp(
  goods_id varchar(6) null,
  ori_piece numeric(15,2) null,
  ori_weight numeric(15,4) null,
  in_piece numeric(15,2) null,
  in_weight numeric(15,4) null,
  out_piece numeric(15,2) null,
  out_weight numeric(15,4) null,
  rem_piece numeric(15,2) null,
  rem_weight numeric(15,4) null)

insert #tmp
select goods_id  = GoodsType.id,
        ori_piece  = 0,
  ori_weight = 0,
  in_piece  = 0,
  in_weight  = 0,
  out_piece  = 0,
  out_weight = 0,
  rem_piece  = 0,
  rem_weight = 0
from GoodsType

/*进库件数和重量处理-----开始*/
create table #tmp_input(
  goods_id varchar(6) null,
  input_piece numeric(15,2) null,
  input_weight numeric(15,4) null)

insert #tmp_input
select Goods.goty_id,
       sum(InputDetail.number),
       sum(InputDetail.weight)
from  InputDetail,Input,Goods,#tmp
where InputDetail.input_id = Input.id
and   InputDetail.goods_id = Goods.id
and   Input.input_date >=  @start_date
and   Input.input_date <  @end_date
and   #tmp.goods_id = Goods.goty_id
and   Input.status <> 'Y'
group by Goods.goty_id
order by Goods.goty_id

update #tmp
set    in_piece    = input_piece,
   in_weight   = input_weight
from   #tmp,#tmp_input
where  #tmp.goods_id = #tmp_input.goods_id

drop table  #tmp_input
/*进库件数和重量处理-----结束*/

/*出库件数和重量处理-----开始*/
create table #tmp_output(
  goods_id varchar(6) null,
  output_piece numeric(15,2) null,
  output_weight numeric(15,4) null)

insert #tmp_output
select Goods.goty_id,
       sum(OutAccount.number),
       sum(OutAccount.weight)
from  OutAccount,Goods
where OutAccount.goods_id = Goods.id
and   OutAccount.out_date >=  @start_date
and   OutAccount.out_date <  @end_date
group by Goods.goty_id
order by Goods.goty_id

update #tmp
set    out_piece    = output_piece,
      out_weight   = output_weight
from   #tmp,#tmp_output
where  #tmp.goods_id = #tmp_output.goods_id

drop table #tmp_output
/*出库件数和重量处理-----结束*/


/*处理原有库存件数和重量-----开始*/
create table #tmp_input_detail(
  goods_id varchar(6) null,
  input_detail_piece numeric(15,2) null,
  input_detail_weight numeric(15,4) null)
  
insert #tmp_input_detail
select 
 Goods.goty_id,
 sum(InputDetail.number),
       sum(InputDetail.weight)
from   InputDetail,Input,Goods
where  InputDetail.input_id = Input.id
and    Input.status <> 'Y'
and   InputDetail.goods_id = Goods.id
group by Goods.goty_id
order by Goods.goty_id

create table #tmp_OutAccount(
  goods_id varchar(6) null,
  outaccount_piece numeric(15,2) null,
  outaccount_weight numeric(15,4) null)

insert #tmp_OutAccount
select Goods.goty_id,
       sum(OutAccount.number),
       sum(OutAccount.weight)
from  OutAccount,Goods,Input
where OutAccount.goods_id = Goods.id
and   OutAccount.out_date <  @end_date
and   OutAccount.input_id = Input.id
and   Input.status <> 'Y'
group by Goods.goty_id
order by Goods.goty_id


update #tmp_input_detail
set    input_detail_piece  = input_detail_piece - outaccount_piece,
 input_detail_weight = input_detail_weight - outaccount_weight
from   #tmp_input_detail,#tmp_OutAccount
where  #tmp_input_detail.goods_id = #tmp_OutAccount.goods_id

update #tmp
set      ori_piece  = input_detail_piece,
      ori_weight   = input_detail_weight
from #tmp,#tmp_input_detail
where  #tmp.goods_id = #tmp_input_detail.goods_id  

drop table #tmp_input_detail
drop table #tmp_OutAccount 

/*处理原有库存件数和重量-----结束*/

/*处理结存库存件数和重量-----开始*/
update #tmp
set    rem_piece = ori_piece + in_piece - out_piece,
 rem_weight = ori_weight + in_weight - out_weight

/*处理结存库存件数和重量-----结束*/
select * from #tmp order by goods_id

drop table #tmp
------华软网友回复------
打开tempdb的一个数据库选项:sp_dboption tempdb,"select into/bulkcopy",true
------华软网友回复------
关注 + 友情UP
------华软网友回复------
我已经按照darking2005(冷月无声) 所说的这样作了,好像还是报一样的错误来。

请支持……
------华软网友回复------
设置 sqlca.autocommit = true 再执行这些语句就行了! 因为一个事务只能执行一个create table SQL 语句
------华软网友回复------
搞错了,创建临时表应该没问题的. 可以试试,在执行SP之前,执行commit语句
------华软网友回复------
關注中
------华软网友回复------
问题终于解决了。

感谢各位热心人。
问题是这样的,
首先按照darking2005(冷月无声) 所说的:“sp_dboption tempdb,"select into/bulkcopy",true”
其次按照lzheng2001(1加1) 所说的:“设置 sqlca.autocommit = true 再执行这些语句就行了! 因为一个事务只能执行一个create table SQL 语句”(如果不这样,多执行同样的一个操作几次,就会报错select error:the 'CREATE TABLE' commands is not allowed with a multi_statement transaction in the 'tempdb' database)

结贴
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。