举个例子:
表request中有字段state(int)和time(datetime)
查询request(state=-1)
如果getdate()-time>0,设置state=0,显示该记录
否则,设置state=1,并删除request中该记录,同时将该记录的
   部分信息添加到record表中。能不能在一个select语句中实现?

解决方案 »

  1.   

    SQL2008才可以在一个语句中实现
      

  2.   

    CREATE TABLE tbSource(C1 INT PRIMARY KEY,C2 NVARCHAR(10))
    GO
    INSERT tbSource VALUES(1,N'甲'),(2,N'乙')
    GO
    SELECT * INTO tbDest FROM tbSource DELETE tbSource WHERE c1=1
    UPDATE tbSource SET c2=N'乙2' WHERE C1=2
    INSERT tbSource VALUES(3,N'丙') MERGE tbDest D
      USING tbSource s
      ON D.c1 = S.c1
      WHEN MATCHED THEN --修改
        UPDATE SET D.c2 = S.c2
      WHEN SOURCE NOT MATCHED THEN  --删除
         DELETE
      WHEN TARGET NOT MATCHED THEN  --新增
        INSERT VALUES(c1, c2)
        OUTPUT $action, INSERTED.c1 [New c1], 
                        INSERTED.c2 [New c2], 
                        DELETED.c1  [Original c1],
                        DELETED.c2  [Original c2]; 
    http://topic.csdn.net/u/20080514/15/af788986-0ef6-4d83-8e9d-4cb97e2831c8.html?13522
      

  3.   

    在一个存储过程里可能做得到,sql2005里也有output子句,就是在更新和删除的时候可以将记录插入到一个指定的表
      

  4.   

    我用的是SQL 2K,看来是“不可能”了。
    在where里嵌套case when行不行啊?