Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一表中插入后的sql触发器更新列_Sql_Sql Server_Triggers_Insertion - Fatal编程技术网

同一表中插入后的sql触发器更新列

同一表中插入后的sql触发器更新列,sql,sql-server,triggers,insertion,Sql,Sql Server,Triggers,Insertion,我正在尝试写一个触发器,以便在插入完成时更新同一表中的一列 我的桌子是空的 create table BlueTooth ( ID int Primary Key NOT NULL , version varchar(45) NOT NULL, score float null, speed float ); 我的扳机是 create or replace trigger BlueToothsc ON BlueTooth after insert as begin update Bl

我正在尝试写一个触发器,以便在插入完成时更新同一表中的一列

我的桌子是空的

create table BlueTooth (
ID int Primary Key NOT NULL ,
version varchar(45) NOT NULL,
score float null,
speed float 
);
我的扳机是

create or replace trigger BlueToothsc
ON BlueTooth 
after insert 
as 
begin 
update BlueTooth set score((select speed from inserted)/(select max(speed) from BlueTooth ) * 100)
END 
GO
但是我在第一行的“关键字”或“关键字附近的”不正确语法”中遇到错误 和
“as”

谁能帮我一下吗

我想通过(插入速度/max(速度))*100更新
BlueTooth
表格
score

当一个更快的蓝牙版本出现时,分数值应该是100,而其他所有的分数值应该是更低的。

语法错误是

1) You have to create or alter the trigger seperately
2) missed = while assigning the value to score in update statement
试试这个扳机

create trigger BlueToothsc
ON BlueTooth 
after insert 
as 
begin 
update BlueTooth set score = ((select speed from inserted)/
             (select max(speed) from BlueTooth ) * 100)
where ID = (SELECT ID FROM INSERTED)
END 
GO
与其存储分数,不如在查询时计算分数。因此,在这种情况下,视图应该完成以下工作:

create table BlueTooth (
ID int Primary Key NOT NULL ,
version varchar(45) NOT NULL,
speed float 
);
go
create view BlueToothScores
as
   select
       ID,
       version,
       speed,
       speed * 100 / MAX(speed) OVER () as score
   from
       BlueTooth

现在,您不必担心触发器或更新例程-结果总是正确的,因为它们是根据真实数据计算的

如果
得分
总是正确的,那么最好在视图中计算,而不是存储在表中。即,如果第一次插入的速度为
1
,然后单独插入的速度为
100
,则两个分数都将为100。这真的是你想要的吗?@Damien_,不相信你是对的,当我运行触发器时,它只会更改插入的行,而你的示例是正确的,这不是我真正想要的。如果有更快版本的蓝牙,我想更新所有分数值。您有什么建议吗?对于任何多行插入都将失败,并将
bluetooth
中所有行的
score
更新为相同的值。第一个是错误,我相当肯定第二个不是OP所追求的。@Damien_不相信者对,我可能需要一个过程,在我添加更大的值时更新所有行