一个关于SQL2000下存储过程的概念问题?(20分)

  • 主题发起人 主题发起人 icool
  • 开始时间 开始时间
I

icool

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在并发条件下,存储过程中的多个sql语句的执行是不可分割的吗?
例如:要求存储过程返回插入表A的纪录的ID值,其有两条SQL语句。
语句1:向表A插入一条纪录,其主键ID是自增字段
语句2:select ID from A where id=(select max(ID) from A)
如果存贮过程中sql语句执行是不可分的,存储过程将返回正确的ID;否则,它就有可能
返回错误的ID.
请有开发并发数据库经练的大富翁指教。
 
是的.
不过不必用select ID from A where id=(select max(ID) from A)
有一个全局变量@@Identity
 
你也可以,在:存储过程中,用:事务+锁,来解决。
 
事务~~~~~~~~~~~~~~~~~
 
不必再搜一次,用SCOPE_IDENTITY()获得刚插入纪录的id值
 
BEGIN TRAN
INSERT INTO A ....
SET @ID = @@IDENTITY

COMMIT TRAN
 
在并发条件下,存储过程也是单个的执行单元,可以用事件分析器加以分析;检索ID值我同意
LEECHANGE的方法,用全局变量就可以了.
 
看看sql的帮助,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 有区别的,足好还是用
SCOPE_IDENTITY比较精确可靠
 
先谢谢各位大富翁的热心回答。
我还想请教各位大富翁关于这样的概念问题有那些教材可以参考?
 
用@@IDENTITY,看SQL SERVER的联机手册
 
存储过程中的多个sql语句的执行是不可分割的这样的概念在那些教材中提到过?
 
后退
顶部