如何将状态值从1更改为0

时间:2018-11-11 12:44:55

标签: sql-server

我有一个名为WRISTBANDS的表,该表已连接到一个名为PARTICIPANTS的表。

每次要将新行插入STATUS表中并与现有参与者相关联时,我想将WRISTBANDS表中的属性WRISTBAND更改为INACTIVE(= 0)在WRISTBAND表中。

CREATE TRIGGER tg3_after_insert
ON WRISTBANDS
AFTER INSERT 
AS
BEGIN 
    UPDATE WRISTBANDS
    SET STATUS = 0
    WHERE IDPARTICIPANT IN (SELECT IDPARTICIPANT FROM WRISTBANDS)
END 
GO

我已经尝试过这种方法,但是发生的是表WRISTBANDS中的所有记录都将其属性STATUS更改为=0。并且我希望触发器比较IDPARTICIPANT从插入的记录到WRISTBANDS表中的所有记录,如果存在相同的IDPARTICIPANT,则应将存在的记录更改为STATUS =0。

希望我已经解释了自己。我是SQL开发的新手,只是学习而已。

谢谢。

1 个答案:

答案 0 :(得分:2)

据我了解,您希望将现有记录的status设置为与插入的记录相同的0值,请将现有记录的IDPARTICIPANT设置为WRISTBANDS(请纠正我我错了。

出于这个答案的目的,我假设您的ID表具有主键,并且它是一个名为WRISTBANDS的单列(对于复合主键,它的工作原理相同,这是为简单起见而做出的假设。

因此,您需要使用inserted表和CREATE TRIGGER tg3_after_insert ON WRISTBANDS AFTER INSERT AS BEGIN UPDATE T SET [Status] = 0 -- status is a reserved word in SQL Server, so use square brackets FROM WRISTBANDS AS T JOIN INSERTED AS I -- join is equivalent to inner join ON T.IDPARTICIPANT = I.IDPARTICIPANT -- only records with the same IDPARTICIPANT WHERE T.Id != I.Id -- only records that was not inserted in he statement that fired this trigger END 表(由SQL Server为您生成)之间的内部联接的更新,如下所示(请阅读代码中的注释:澄清):

<html>
<script>
    var input = [];  
    var a = 0;

    amount = Number(prompt("How many numbers do you wish to input?"));

    for (i = 0; i < amount; i++) {
        a = i + 1;
        input[i] = Number(prompt("Please enter the " + a + ". number:"));
    }

    alert(input.toString())
</script>
</html>