Microsoft SQL触发器:指向同一记录的多个联接记录是否无法更新?
背景:Microsoft SQL触发器:指向同一记录的多个联接记录是否无法更新?,sql,sql-server-2005,triggers,Sql,Sql Server 2005,Triggers,背景: 从1开始,我每周都有一套产品 我有一个产品“库”,它是零周,保存着任何时间段最后保存的产品 我有一个在更新或插入时触发的触发器,它使“库”项与插入的项保持最新 由于使用“序列”字段在同一事件中可能存在重复的产品,因此my join将创建多个要更新的记录,这些记录以相同的库记录为目标 一些问题: 这些倍数是否会使update命令失败 是否有更好的方法更新单个库产品 代码: -- PK is ID, Week #, and Sequence # update p set p.name
- 从1开始,我每周都有一套产品
- 我有一个产品“库”,它是零周,保存着任何时间段最后保存的产品
- 我有一个在更新或插入时触发的触发器,它使“库”项与插入的项保持最新
- 这些倍数是否会使update命令失败李>
- 是否有更好的方法更新单个库产品
-- PK is ID, Week #, and Sequence #
update p set p.name = i.name
from product p join inserted i on
p.id = i.id and p.week = 0 and p.sequence = 1
注意:“插入”可以有多个事件。ID类似于UPC,周是标识,序列类似于标识,但每周从1开始。您可以有一个2的序列,而没有一个1的序列,因为他们可以删除产品
样本数据:
IDWeekSequenceName1234513首先插入乐高
1234522乐高玩具插入秒
1234523乐高玩具插入秒
结果数据: IDWeekSequenceName
1234501Lego Toy过去是“乐高”,现在是“乐高玩具”
根据BOL条目: 指定起始位置时要小心 条款,以提供以下各项的标准: 更新操作。调查结果 如果 语句包含FROM子句,该子句 未以以下方式指定: 每个值只有一个可用值 已更新的列引用, 也就是说,如果UPDATE语句是 不确定 换句话说,如果一个
UPDATE
语句使用了一个FROM
子句,该子句有多行符合条件来更新一行,则不知道将使用哪一行新数据。在示例数据中,不知道结果是从行中的名称更新而来的Sequence=2
还是Sequence=3
因此,如果哪一行用于更新并不重要,那么您当前所做的工作就可以了。但是,如果这是一个问题,您需要编写更新的FROM
和WHERE
子句,以便每个项目只返回一行,可能类似于以下内容:
;with insert2 as (
select id, week, sequence, name,
row_number() over(partition by id order by week desc, sequence desc) as [descOrd]
from inserted
)
update p
set p.name = i.name
from product p
join insert2 i on p.id = i.id and p.week = 0 and p.sequence = 1
where i.descOrd=1
你有一些样本数据吗?具体来说,更新后希望表包含什么?感谢示例数据,现在我更清楚地知道您要做什么。