delphi 中怎样返回SQL SERVER7.0 中具有IDENTITY属性的列值?(100分)

  • 主题发起人 主题发起人 czhysj
  • 开始时间 开始时间
C

czhysj

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个三层系统中,我在SQL SERVER 中建立一个工人工作表GRWORK,主要有如下字段及属性:
GRBH 工人编号 CHAR
CPBH 产品编号 CAHR
CPSL 产品数量 INT
UNIQUEBH 唯一编号 INT IDENTITY(1,1)
问题是这样:当我在客户端中输入一条记录如(‘1121’,‘12345’,100),然后用
APPLYUPDATES(0)提交之后,我在客户端中的UNIQUEBH这列中却无SERVER在UNIQUEBH中
产生的列值返回而仍然是一个空值,造成某些操作不能完成,
而必须重新从SQL SERVER 中获取数据才有这列的数值,但这样做会造成网络负荷加重。
如果用@@idetity 系统变量每次都读数据库,在多用户环境可能具有延时且加大网络负荷,
因为我的数据表有800多万条记录,请问在多用户环境中有什么办法可以使我在提交数据时,
自动获得SERVER 产生的IDENTITY列值,或者在多用户环境中有什么办法可以保证自动插
入一个唯一值到数据库!谢谢赐教!
 
IDENTITY值可以用存储过程取得,使用tquery+tupdatesql,每次提交时同时运行存储过程获得
自动增量,往query中写,updatesql中不提交IDENTITY列
 
谢谢billst,我还是不明白具体的步骤,请问能否给出具 体的步骤
 
我认为:IDENTITY 列的在客户端提交数据后,始终应该刷新,不管是用什么语句。
另外,关于唯一标识的获得,我认为采用单独的表获得比较好:该表只有一个字段,
永远只有一行记录,每次独占加 1 后获得自己的唯一标识。
 
感谢lccc的回答,但有一个问题如何解决,在多用户环境中,当A用户提取IDENTITY列值
AA之后,在A用户提交数据之前,B用户己经提交此IDENTITY列AA值,这样便 会造成重复,
请问有什么方法解决?

AA之后
 
to czhysj:
由于每次独占后加 1 作为自己的标识,不会出现两个重复的标识,
这种方法唯一不好的是标识可能不连续。
 
写一个存储过程 Insert 记录,定义出口参数,用 Select ID From Inserted 给出口参数赋值。
Inserted 是系统虚表。
 
接受答案了.
 
后退
顶部