存储过程的问题?(100分)

  • 主题发起人 主题发起人 thesadfrog
  • 开始时间 开始时间
T

thesadfrog

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:sqlserver 200 /7.0
create procedure GetCustBillList
...
create #tmpTable(
CustNo char (20) NULL )
...
经过对#tmpTable复杂的操作
select * from #tmpTable
drop table #tmpTable
-------------------------ok
问题是
我用TStoredProc组建,open 之后,
偶尔提示 XXX字段找不到
其中XXX字段 是 #tmpTable表中已定义的字段
而且是 偶尔 出现此类问题,有时候就成功,dbgrid中显示出返回的数据。
求救!
 
drop table #tmpTable 这行不要试试.
 
to zhanggeye
不删除#tmpTable ,用户再次查询(没有中断连接,#tmpTable 没有自动删除),
报告出错,已经存在 #tmpTable (上一次已创建)
所以 不能删除drop table #tmpTable
 
有数据库的高手吗?
要不然 分数太少?
 
不用临时表,改用静态生成的表,实验一下
 
改成下面试试:
create procedure GetCustBillList
...
drop table #tmpTable
create #tmpTable(
CustNo char (20) NULL )
...
经过对#tmpTable复杂的操作
select * from #tmpTable
 
楼上说的对
临时表不用删除,存储过程结束后自动删除
不用Create #表
用Select * into #表 from 表2
 
to problemkid:
多用户操作, 静态表 ?
to dxymzj:
问题是连接未断开,用户又刷新数据,又创建#table?
 
create procedure GetCustBillList
...首先检查#tmpTable存不存在,存在删除
把 drop table #tmpTable
create #tmpTable(
CustNo char (20) NULL )
...
经过对#tmpTable复杂的操作
select * from #tmpTable
 
create procedure GetCustBillList
if #tmpTable存在 then
把 drop table #tmpTable
----或者不删除,如果字段一样的话就直接清空该表就行了(delete from #tmptable)
else
create #tmpTable(
CustNo char (20) NULL )
...

经过对#tmpTable复杂的操作
select * from #tmpTable
 
好像无法判断 临时表是否存在的吧 ?
另:我得问题是,某些字段找不到,并不是所以的字段找不到,更不是表找不到,大家好像
走了题。
 
多用户操作也可以用静态表啊,只要用用户ID当关键字不就可以了吗?
每个用户只操作属于他的ID的内容,别的内容不允许修改
 
本人提倡尽量少用临时表,而改用静态表
在服务器端建立太多的临时表,占用大量的服务器内存,会造成服务器效率降低
况且,静态表比较稳定,只要实现了查询功能,并且保证稳定运行,
多几个静态表还是比较划算的
 
多人接受答案了。
 
后退
顶部