if object_id('tempdb..#PKefy_Transaction') is null
  CREATE TABLE #PKefy_Transaction (TableName varchar(40), OldKey int, NewKey int, RetTimestamp binary(8))
else
  DELETE FROM #PKefy_Transaction
DECLARE @o_key int
DECLARE @o_key0 int
DECLARE @o_key1 int
DECLARE @o_key2 int
DECLARE @o_key3 int
BEGIN TRANSACTION ShareD_
insert into BAS_Driver
 ([Driver_Name],[License],[Vehicle_Shop],[Mobile],[Phone],[E_Mail],[City],[Driver_Type],[Seat],[Memo]) 
VALUES ('12213','213321','213321','231321','213321','213321','231321','213321','213321','Memo213231')
SET @o_key=scope_identity()
Insert into #PKefy_Transaction (TableName, OldKey, NewKey)
  VALUES ('BAS_Driver', 1, @o_key)
COMMIT TRANSACTION ShareD_
SELECT * FROM #PKefy_Transaction
DROP TABLE #PKefy_Transaction
RETURN
ERROR:
BEGIN
  ROLLBACK TRANSACTION ShareD_
  SELECT err=1
END这是我的原SQL语句,提示是在: SET @o_key=scope_identity() 这句出错,请问是什么原因?

解决方案 »

  1.   

    你说说SET @o_key=scope_identity()这句话是什么意思.
    你建的是存储过程?
      

  2.   

    SET @o_key=scope_identity() 是返回主键自动ID的值啊  在SQL 2000里面是这么用的
      

  3.   

    这些SQL语句的作用是当新插入一条数据的时候,就把这条数据的自动ID给取回来,放到临时表里面去,然后把临时表的数据拿回来,再更新到界面去
      

  4.   

    Sybase Anywhere8 数据库支持scope_identity() 这个吗?
      

  5.   

    We can get generated identity key by following java code:rs = stmt.executeQuery("select @@identity");int key = -1;if (rs.next())    key = rs.getInt(1);-------------------------In  comming JDBC 3.0 , we can use Statement.getGenerateKeys to fecth the odometer. But it's not support yet in our jconn5.5@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在给没有 IDENTITY 列的其他表插入记录,系统将其置为 null。如果有多行记录插入到 IDENTITY 表中,@@IDENTITY 表示最后一个产生的值。如果触发了某个触发器,并且这个触发器执行向另一个带有 IDENTITY 列的表的插入操作,@@IDENTITY 将返回这个由触发器产生的值。如果这个触发器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 将为 null。如果插入操作失败,@@IDENTITY 值依然会增加,所以 IDENTITY 不保证数据的连续性。  @@IDENTITY 是当前连接的全局变量,只对当前连接有效。也就是说,如果断开连接再重新连接后,@@IDENTITY 为 null。以 ADO 来说,@@IDENTITY 在 Connection 对象打开和关闭期间是有意义的,即在 Connection 对象的存在范围内有效。在 MTS 组件中,从打开连接到显式的关闭连接(Connection.Close)或者到调用了 SetAbort,SetComplete之前,在这期间,@@IDENTITY 有意义。使用 Truncate table 语句会使 IDENTITY 列重新开始计算。  String sql = "insert into tempdb..tmp_iden (value) values (?) \nselect @@identity";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setInt(1, 3);
      ResultSet rs = ps.executeQuery();  int key = -1;
      if (rs.next())
        key = rs.getInt(1);