ADO连接SQL Server,使用触发器时出现的问题!!!!(300分)(300分)

  • 主题发起人 主题发起人 rongyujohny
  • 开始时间 开始时间
用的是AFTER触发器
 
这跟ADO没关,SQLServer就是这样设计的,@@Identity是全局变量,
返回的是最近一个自增类型字段的值.
当你向A中增加时@@Identity是127,但这时触发器又执行了,B又增加一条记录,
此时@@Identity就变成B的自增字段值456了.所以你得到的一定是456.
除非你用其它方法(不用@@Identity)或设法先增加B再增加A
 
这样还不好作吗,在b表中的id值不要让他自增就好了,直接去a表的id值就ok了,哈哈
 
我觉得还是用存储过程处理好一些,语句示例如下:
begin tran
Insert A
Select @Return=@@Identity

insert B
comm

前台使用A表时重新刷新。

不知你明白了吗?
 
To 猛禽
我必须新增A后才能触发,所以怎么能先新增B后新增A,况且我在触发器里还要用新增
A表的ID。

To bjf2001
这个方法是返回A表的正确ID值,那B表唯一值字段去掉了,该如何?这样给自己定义的
递增函数带来了难度,因为我在A表新增触发器时候是新增B表的几条记录。谢谢!

To 薛狮
用存储过程实现自然可以,不过思路不同!存储过程实现思路我明白!如果还找不到好
的解决方法,只能考虑用存储过程。谢谢!
 
select max(id) from A

通过这样来取新增的id吧
 
To Adnil
不知你的意思是不是通过“select Max(ID) FROM B”这样取B表新增记录的ID值。
这样取ID,那么在A表新增触发器里对B表新增的记录的ID会都一样
 
没有这么复杂吧!,小弟用过类似的功能,很简单就实现了,在你的B表中增加一个字段,
存储A表中的唯一ID值,另外可以在给B表建立一个主键,这样简单,而且A,B表关联也没
问题呀!
 
To yljailxx
如果取消一个表的ID字段,当然可以,如果要这个方法那就不用拿出来问了。
 
还要考虑到多用户的情况,假如你插入数据后刚好其它用户也插入了数据呢?
 
同一个触发器触发总有个先后顺序的,所以多用户在触发器应该是没有冲突的!
 
象ficq一样,注册后,能把号码(identity)返回客户端
不知道怎么实现,多用户进行数据库操作时候。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=481730
 
我昨天也遇到相同的問題,我試了一個下午還是沒有結果……
強列關注中……………
 
试试before触发器,如果sqlserver在befoer触发器里还没有为表A计算新的id,那么就可以了。
如果不行那就只有存储过程了。
 
在sqlserver中没有before触发器的。只有after和instead of 两种
 
你的表id字段是自动增长的吗??我想应该是你数据库设计出问题
 
后退
顶部