我有一个名为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开发的新手,只是学习而已。
谢谢。
答案 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>