我正在尝试根据条件对表执行大规模更新。
UPDATE POHeader
SET POStatus = 'Cancelled'
WHERE POStatus = 'Draft'
AND Created <= DATEADD(DD, DATEDIFF(DD, '', GETDATE())-29, '')
我甚至尝试了同样的错误:
UPDATE POHeader
SET POStatus = 'Cancelled'
WHERE POID in (18364, 26401, 27284, 28575, 30532, 30599, 33650,
33780, 33783, 33785, 33895, 35644, 35647, 35678,
37400, 37546, 38750, 38758, 40568, 42045, ......)
请提供帮助,因为更新的数量已经达到数千个,一个接一个地更新是不可能的。
更新触发器
ALTER TRIGGER [dbo].[POHeader_UPDATE]
ON [dbo].[POHeader]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[POHeaderLog]
([ActionDate]
,[Action]
,[POID]
,[CustomerName]
,[CustomerCode]
, ...)
VALUES
(GETDATE()
,'Update'
,(select INSERTED.POID from INSERTED)
,(select INSERTED.CustomerName from INSERTED)
,(select INSERTED.CustomerCode from INSERTED)
, ...)
END
1条答案
按热度按时间wkftcu5l1#
问题在于触发码。SQLServer的触发器操作语句级别,因此在
inserted
. 如果update
触发触发器的语句影响了不止一行—因此会出现错误。您可以使用
insert ... select
语法: