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的值;如果没有,则不执行任何操作。
简单的说,这个是论坛升级用的触发器,并且是只升级,不降级的。学习,关注……
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的值;如果没有,则不执行任何操作。
简单的说,这个是论坛升级用的触发器,并且是只升级,不降级的。学习,关注……
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
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
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
I是表 inserted 的别名
谢谢各位了!