SQL server 中用存储过程做查询,并把结果出入临时表。怎样解决多用户同时访问调用存储过程时,该临时表的共享冲突问题(100分)

  • 主题发起人 主题发起人 lan2001
  • 开始时间 开始时间
L

lan2001

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL server2000 + delphi5
要求:用户对查询的结果可以修改,打印修改后的结果,但修改的结果不存会原库(yss)。
我的方法:
1.在服务器端用存储过程作查询,并把查询结果存入tmp_chx.
如:
CREATE PROCEDURE Pysz
@iv_gcdm char(10), @iv_wzdm char(10)=null
AS
/--先删除临时表(TMP_YSZ)
if exists (select * from sysobjects where id = object_id(N'TMP_YSZ')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table TMP_YSZ

SELECT DEDM AS 定额代码, SL AS 数量, JE AS 金额, DJ AS 单价, BZ AS 摘要
INTO TMP_YSZ
FROM YSS
WHERE GCDM = @iv_gcdm and WZDM = @iv_wzdm
//
SELECT * FROM TMP_YSZ
go
2.前端delphi的DBGrid 通过AdoProc与存储过程相连。
出现问题是:
当多个用户都做查询时,tmp_ysz 是最后以用户的查询结果。当前面的用户再打印查询的数据时,
已经不是他所查询的结果了。请问这个问题怎么解决?
临时库tmp_ysz是不是应该存到客户端?
 
直接返回一个table类型,不需要临时表,具体看联机丛书

-----
http://www.8421.org
 
不明白。你是说存储过程设一个table类型的返回参数,
 
CREATE PROCEDURE Pysz
@iv_gcdm char(10), @iv_wzdm char(10)=null
AS
SELECT DEDM AS 定额代码, SL AS 数量, JE AS 金额, DJ AS 单价, BZ AS 摘要
FROM YSS
WHERE GCDM = @iv_gcdm and WZDM = @iv_wzdm
go
或者
CREATE PROCEDURE Pysz
@iv_gcdm char(10), @iv_wzdm char(10)=null
AS
SELECT DEDM AS 定额代码, SL AS 数量, JE AS 金额, DJ AS 单价, BZ AS 摘要
INTO #TMP_YSZ
FROM YSS
WHERE GCDM = @iv_gcdm and WZDM = @iv_wzdm
//
SELECT * FROM #TMP_YSZ
go
 
在 存储过程结束前使用 select * from #table 就行了,
使用局部临时表不该存在共享冲突的问题
 
smallbs的是正解了,如果一定要自己起名字,加个USER列不就完了?哪个用户用自己的
到时候DELETE自己的数据
 
一定要用临时表的话,用客户端的机器名+登陆用户名
或者用网卡物理地址作临时表名
 
CJ,rainxy2002,我想用临是表,表名为:tmp+用户登录名(用变量user存)
请问在存储过程中怎样指定临时表的名字?支持宏替换吗?
是这样吗?
insert into #tmp@user
 
SET @sCommand='INSERT INTO #tmp'+user+'...'
EXECUTE(@sCommand)
 
春天的故事,
create procedure chaxun @input_value
as
select *
from students
where EXECUTE(@input_value)
这样可以吗?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
493
import
I
后退
顶部