【发布时间】:2015-03-06 01:55:20
【问题描述】:
我有一个存储过程,其中包含类似这样的代码,
if Exists(select * from sysobjects where name = 'tblProducts_Details' and xtype = 'U')
begin
Drop table tblProducts_Details
End
select * into tblProducts_Details from tblProducts
alter table tblProducts_Details add gcode varchar(50)
update a set a.gcode = b.gcode from tblProducts_Details a
inner join GroupID_GCode_Mapping b
on a.Company = b.Company
alter table tblProducts_Details add group_code int
update a set a.group_code = b.local_group_code from tblProducts_Details a
inner join Cache.dbo.Z_MAP_GroupID_CGCode_Mapping b
on a.gcode = b.gcode
alter table tblProducts_Details add groupname varchar(2000)
update a set a.groupname = g.name from tblProducts_Details a
inner join tblProductsGroup g
on a.group_code = g.group_id
当我单独执行上述查询时,它返回了完美的结果。但是当我执行这个存储过程时,有时它会返回一个不同的结果集(有些行的值与期望的值不同)。
我不知道为什么。
【问题讨论】:
-
为什么要为此使用持久表?您很可能遇到并发问题。您应该为此使用临时表。
-
我还需要在另一个存储过程中使用这些表。这就是我不使用临时表的原因。
-
但是如果有超过 1 个人运行你的 proc,他们就会互相踩踏。你知道你可以在一个 proc 中创建一个临时表,并且它将在第二个中可用(假设第二个 proc 是从第一个中调用的)?
标签: sql-server stored-procedures