My_Insert_into = "111"
sql1="insert into lipin_test_1 (kkk) values ('"&My_Insert_into&"')"
sql2="insert into lipin_test_2 (id,kkk) values(SCOPE_IDENTITY(),'"&My_Insert_into&"')"
conn.execute(sql1)
conn.execute(sql2)
自己测试用的表都是好的。改到特定的表 SCOPE_IDENTITY()或者@@IDENTITY就总是返回NULL 了。而且第一个插入语句也失败了。A表 主键ID  标识 是  标识种子46560   标识递增量1
B表 主键ID  标识 否下面这样却都可以插入 只是不能解决并发的问题
My_Insert_into = "111"
sql="insert into Atable (kkk) values ('"&My_Insert_into&"')"
conn.execute(sql)
sql="select max(id) as 'pp' from Atable"
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql,conn,3,2
maxid=rs("pp")
sql="insert into Btable (id,kkk) values ("&maxid&",'"&My_Insert_into&"')"
conn.execute(sql)

解决方案 »

  1.   

    ---建议用存储过程做
    create proc p(@val varchar(1000))
    as
    begin
    begin tran
    insert Atable(kkk) values(@val)
    insert Btable(id,kkk) select max(id),@val from Atable

    if @@error=0
    commit tran
    else
    rollback tran
    end
      

  2.   

    在lipin_test_1表上建个触发器,插入数据时触发:向lipin_test_2写入一条数据,,,
      

  3.   

    CREATE TRIGGER trig ON lipin_test_1
    FOR INSERT AS 
    BEGIN
       INSERT lipin_test_2(id,kkk) select id,kkk from inserted
    END
      

  4.   

    SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值,所以你动态SQL后无法取到的
      

  5.   

    將2個insert放在一個字串中,試試
    sql="insert...  insert ...@@identity"
    conn.execute(sql)
    =============================================或者該用IDENT_CURRENT('table_name'),看符不符合要求?
      

  6.   

    do熊即使用触发器,你的触发器写也不对啊,他是想取id最大的,而你取的是当前插入的.
      

  7.   

    即使用触发器,你的触发器写也不对啊,他是想取id最大的,而你取的是当前插入的. -----------
    当前插入的难道不是最大的? 莫非楼主的id列定义是identity(int,10000,-1)?貌似楼主想要的就是当前插入的......
      

  8.   

    @@IDENTITY返回null  表明插值失败,应该去找插值的那个语句原因,还有要确定那张表是不是自增的
      

  9.   

    搂主的问题很奇怪既然插入失败了,那当然返回null,为什么不去查为什么插入失败而查SCOPE_IDENTITY()返回null?