SQL SERVER2000中,两个表的结构如下表A:
UserName    varchar
B_ID        int      对应表B中的ID
Score       int
……表B:
ID      int
Score   int
Name    varchar当表A中Score的值变化的时候,首先根据表A中的B_ID值,来找到对应表B中Score的值,如果此值大于A中Score的值,则不执行任何操作。如果A中Score的值大于B中Score的值,那么在B中寻找是否有Score的值与A中的SCORE的值正好相等,如果有,则将A中的B_ID更改为对应的B中的ID的值;如果没有,则不执行任何操作。
简单的说,这个是论坛升级用的触发器,并且是只升级,不降级的。
学习,关注……

解决方案 »

  1.   

    CREATE TRIGGER TR_表A
    ON dbo.表A
    FOR INSERT, UPDATE
    AS
    IF UPDATE(Score)
    UPDATE A SET
    B_ID = (
    SELECT TOP 1
    ID
    FROM 表B
    WHERE Score = A.Score)
    FROM dbo.表A A,
    inserted I,
    dbo.表B B
    WHERE A.UserName = I.UserName
    AND A.B_ID = I.B_ID
    AND A.Score = I.Score
    AND A.B_ID = B.ID
    AND A.Score > B.Score
    AND EXISTS(
    SELECT * FROM 表B
    WHERE Score = A.Score);
    GO
      

  2.   

    CREATE TRIGGER TR_表A
        ON dbo.表A
        FOR INSERT, UPDATE
    AS
    IF UPDATE(Score)
        UPDATE A SET
            B_ID = ISNULL((
                    SELECT TOP 1 ID
                    FROM 表B
                    WHERE Score = A.Score), B_ID)        
        FROM dbo.表A A, inserted I, dbo.表B B
        WHERE A.UserName = I.UserName AND A.B_ID = I.B_ID AND A.Score = I.Score 
            AND A.B_ID = B.ID AND A.Score > B.Score       
    GO
      

  3.   

    CREATE TRIGGER TR_表A
        ON dbo.表A
        FOR INSERT, UPDATE
    AS
    IF UPDATE(Score)
        UPDATE A SET
            B_ID = (
                    SELECT TOP 1
                        ID
                    FROM 表B
                    WHERE Score = A.Score)        
        FROM dbo.表A A,
            inserted I,
            dbo.表B B
        WHERE A.UserName = I.UserName
            AND A.B_ID = I.B_ID
            AND A.Score = I.Score
            AND A.B_ID = B.ID
            AND A.Score > B.Score
            AND EXISTS(
                    SELECT * FROM 表B
                    WHERE Score = A.Score);
    GO
      

  4.   

    LZ:我试了一下,当A中Score改变(无论是INSERT或UPDATE)的时候,A中的B_ID不会有改变还有我想请教一下:inserted I 这句是什么意思??
      

  5.   


    I是表 inserted 的别名
      

  6.   

    LZ: 刚才试了一下,如果B_ID的值一开始为空,则当SCORE变化的时候,B_ID的值就不会变化,如果不为空,就会变化。
    谢谢各位了!