Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Microsoft SQL触发器:指向同一记录的多个联接记录是否无法更新?_Sql_Sql Server 2005_Triggers - Fatal编程技术网

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开始,我每周都有一套产品
  • 我有一个产品“库”,它是零周,保存着任何时间段最后保存的产品
  • 我有一个在更新或插入时触发的触发器,它使“库”项与插入的项保持最新
由于使用“序列”字段在同一事件中可能存在重复的产品,因此my join将创建多个要更新的记录,这些记录以相同的库记录为目标

一些问题:

  • 这些倍数是否会使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的序列,因为他们可以删除产品

样本数据:

IDWeekSequenceName
1234513首先插入乐高
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

你有一些样本数据吗?具体来说,更新后希望表包含什么?感谢示例数据,现在我更清楚地知道您要做什么。