这是一个触发器,用于在将文档的元数据行添加到表格时添加页面数。
USE [DD1234]
GO
/****** Object: Trigger [dbo].[AfterIns_Pages_ABC_LandCont] Script Date: 10/02/2014 16:30:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AfterIns_Pages_ABC_LandCont]
ON [dbo].[PVDM_DOCS_1234_13]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE D
SET D.DOCINDEX13 = O.Tot_Pages
FROM dbo.PVDM_DOCS_1234_13 D,
(SELECT DOCID, Sum(PAGES) AS Tot_Pages FROM dbo.PVDM_OBJS_1234_13
GROUP BY DOCID) O
WHERE D.DOCID = O.DOCID
AND D.DOCINDEX13 IS NULL
END
GO
所以基本上在将一行(或多行)添加到PVDM_DOCS_1234_13表后,使用该表中的DOCID匹配对象(PVDM_OBJS_1234_13)表中的相同DOCID以检索PAGES值,然后将其插入DOCINDEX13(我们存储用户可见页面数的字段,其中DOCINDEX13为空。
如果将一批5或500行插入到PVDM_DOCS_1234_13中,则插入的最后一行永远不会插入页数,它将保持为NULL。所有其余的都插入了页数。无法弄清楚为什么最后一行总是落在后面。
注意我是一个SQL新手,这是由不再可用的人编码的。
为什么这会对除了插入的最后一行以外的所有新行有效?
谢谢!
答案 0 :(得分:2)
一种可能性是正在更新的行上 DOCINDEX13
is not
NULL`。没有样本数据,就必须看出出了什么问题。
顺便说一下,我倾向于把这个查询写成:
with toupdate as (
select d.*, sum(pages) over (order by docid) as tot_pages
from dbo.PVDM_DOCS_1234_13
)
update toupdate
set docindex13 = tot_pages
where docindex13 is null;
作为SQL中的一般规则,请勿在{{1}}子句中使用逗号。始终使用明确的from
语法。