关于数据库自增字段的一个问题(200分!)(200分)

A

aaab

Unregistered / Unconfirmed
GUEST, unregistred user!
有一张表,有一个自增字段作为主键。
为了增加查询速度,将这张表拆成两个表,把其中部分字段移到另一张表中。
在两个表中建立参照完整性约束。第一张表中的主键是第二张表的主键的外键。
即第二张表的主键和第一张表的主键值相同。
问题:建立第二张表的数据需要有第一张表的主键值,怎样才能取得第一张表的主键值?
在执行完了插入操作后主键值才能后生成,由于多人同时操作数据库,我怎样才能取出
刚刚完成插入操作后那一条记录中生成的主键值?
 
如果是 oracal 就很方便
定义一个序列号就行了。
或者加一个排他锁也行。
 
插如后立即edit、post一次.这时候自增字段的序号就已经行成了.
 
>>aaab
我一般不用自增字段做外键,都是自已加一个字段,手动生成增量值!同时插入两张表!
>>xeen兄(插如后立即edit、post一次.这时候自增字段的序号就已经行成了)
插入后(只要提交了)不就产生了,为什么还要edit,post一次呢?
另外再请教:
两张表的操作在一个事务中,第一张表的操作还未提交,
怎么得到其自增量的值并放到第二张表中呢?
 
to SanDao:
我记得insert后不Edit后是不能post的,不知道是否记错了.
 
主表
append;
fieldbyname('').
post;
从表 before insert
if 主表的id 不存在提示
否则 fieldbyname()
如果用insert 语句可以放到存储过程 select @@identity
 
>>xeen:
不会吧!我从没这样用过!
-----------------------
第二个问题呢,正像楼主所问的,
遇到这样的情况!所有表的外键是某一主表的自增量字段!
当主表和其它表要插新记录时(在一个事务中),这个自增量的主键还没有提交,其它表
的外键并没有值插入,怎么办!
----------------------
我是用变通的方法,自添了一个字段作所有表的关联字段(手动自增量)!不知道大家平
时是如何做的!请教了:)
 
感谢各位的大力支持!
1 主表、从表的操作一定是在一个事务之中。
2 由于其他原因。我们无法手动生成增量值。只能使用已有的自增字段。
3 希望能给出代码。
 
>>aaab
经ugvanxk兄提醒看了SQL Server帮助:

在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的
最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。
若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。
如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用
@@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败
或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和
IDENT_CURRENT 函数类似。
@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。
但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

例子:
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity' //这里取到最近的值(没用过,我也回去试试)

谢谢ugvanxk兄
 
多人接受答案了。
 
用bookmark
 
顶部