这是一个触发器,用于在将文档的元数据行添加到表中时添加页数。
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与Object(PVDM_OBJS_1234_13)表中的相同DOCID匹配以检索PAGES值,然后将其插入DOCINDEX13(我们存储用户可见页面计数的字段)中,其中DOCINDEX14为空。
如果在PVDM_DOCS_1234_13中插入了一批5行或500行,则插入的最后一行永远不会插入页数,它将保持为NULL。其余的都会插入页数。无法理解为什么最后一行总是被落在后面。
注意,我是SQL新手,这是由一个不再可用的人编写的。
有什么想法吗?为什么这适用于除插入的最后一行之外的所有新行?
谢谢!
一种可能性是正在更新的行上的DOCINDEX13
from
为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中的一般规则,不要在join
子句中使用逗号。始终使用明确的CCD_4语法。