Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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_Database_Triggers_Sql Update - Fatal编程技术网

Sql 用于比较同一行的更新的触发器

Sql 用于比较同一行的更新的触发器,sql,sql-server,database,triggers,sql-update,Sql,Sql Server,Database,Triggers,Sql Update,问题是,当两行或更多行具有相同的数据时,我需要更新一行,因此我需要比较相同的列进行更新。。这将更好地解释我: 我有这个触发器(但我不想删除任何东西) 删除n1 从代码成本n1到代码成本n2 其中n1.Code=n2.Code和n1.PeriodID=n2.PeriodID n1.ID

问题是,当两行或更多行具有相同的数据时,我需要更新一行,因此我需要比较相同的列进行更新。。这将更好地解释我:

我有这个触发器(但我不想删除任何东西)

删除n1
从代码成本n1到代码成本n2
其中n1.Code=n2.Code和n1.PeriodID=n2.PeriodID
n1.ID
我需要做一些类似的事情,但要更新另一行。像这样的

UPDATE Codes_Cost n2
SET n2.Status = 'Old'
WHERE n1.Code = n2.Code and n1.ID < n2.ID
更新代码\u成本n2
设置n2。状态='旧'
其中n1.Code=n2.Code,n1.ID
但很明显,它不起作用。
我能做什么?什么样的查询会有帮助?

如果我理解正确,应该可以

UPDATE Codes_Cost 
SET Status = 'Old'
FROM Codes_Cost 
INNER JOIN Codes_Cost n2 ON Codes_Cost.Code = n2.Code 
WHERE
Codes_Cost.ID < n2.ID
更新代码\u成本
设置状态='Old'
从代码到成本
内部连接代码\u Cost n2在代码上\u Cost.Code=n2.Code
哪里
代码\u Cost.ID

由于表名不明确而编辑。

您使用的是什么RDBMS?@Mureinik SQL Server使用自联接进行更新时,应为两个表都添加别名并更新别名。这使代码非常清晰。@SeanLange,是的,问题是同一个表中有两行,而不是我理解的两个表。看看这里的代码。Codes\u Cost具有自联接。我想你不明白我的评论。好吧,我明白了!这是有效的:)更新c2集合c2.Status=‘Old’来自代码_costc1,代码_costc2,其中c1.Code=c2.Code和c1.PeriodID=c2.PeriodID和c1.IDUPDATE Codes_Cost SET Status = 'Old' FROM Codes_Cost INNER JOIN Codes_Cost n2 ON Codes_Cost.Code = n2.Code WHERE Codes_Cost.ID < n2.ID