我有两个表,我需要查询A表里面的endtime,如果endtime小于当前时间,那么先将A表里面的type改为1,然后再在B表中插入一条记录,num为在前一条name相同的记录上+1,A,B表相关联的字段为name字段,即A.name = B.name,这个我改怎么办
A表:
B表:

解决方案 »

  1.   

    B表的ID呢,是A表的ID吗?
      

  2.   

    不是A和B的id都是自增
      

  3.   

    BEGIN TRAN
    DECLARE @T TABLE(name VARCHAR(100))
    UPDATE A
    SET type=1
    OUTPUT DELETED.name INTO @T
    WHERE endtime<GETDATE()AND type=0
    INSERT INTO B
    SELECT ROW_NUMBER()OVER(PARTITION BY T1.name ORDER BY GETDATE())+T2.num
    ,T1.name
    FROM @T T1 JOIN(SELECT MAX(num)num,name FROM B GROUP BY name)T2
    ON T1.name=t2.name
    COMMIT TRAN 
      

  4.   

    job应该可以,不知有没有更好的方法
      

  5.   

    把所有DML语句放在一个事务中,就像这样
    我觉得没必要引入表变量,先insert,再update就可以了