Sql 表上的大规模更新。错误';Msg 512-子查询返回的值超过1';
我正在尝试根据条件对表执行大规模更新Sql 表上的大规模更新。错误';Msg 512-子查询返回的值超过1';,sql,triggers,sql-update,sql-insert,sql-server-2016,Sql,Triggers,Sql Update,Sql Insert,Sql Server 2016,我正在尝试根据条件对表执行大规模更新 UPDATE POHeader SET POStatus = 'Cancelled' WHERE POStatus = 'Draft' AND Created <= DATEADD(DD, DATEDIFF(DD, '', GETDATE())-29, '') 请提供帮助,因为要更新的数量已达到数千,并且不能逐个更新 更新触发器 问题在于触发代码。SQL Server的触发器操作语句级别,因此插入的中将有多行。如果触发触发器的u
UPDATE POHeader
SET POStatus = 'Cancelled'
WHERE POStatus = 'Draft'
AND Created <= DATEADD(DD, DATEDIFF(DD, '', GETDATE())-29, '')
请提供帮助,因为要更新的数量已达到数千,并且不能逐个更新
更新触发器
问题在于触发代码。SQL Server的触发器操作语句级别,因此插入的
中将有多行。如果触发触发器的update
语句影响了多行,则会出现错误
您可以使用insert。。。选择
语法:
ALTER TRIGGER [dbo].[POHeader_UPDATE]
ON [dbo].[POHeader]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[POHeaderLog]
([ActionDate]
,[Action]
,[POID]
,[CustomerName]
,[CustomerCode]
, ...)
SELECT
GETDATE()
,'Update'
,POID
,CustomerName
CustomerCode,
, ...
FROM inserted;
END
问题在于触发代码。SQL Server的触发器操作语句级别,因此插入的中将有多行。如果触发触发器的update
语句影响了多行,则会出现错误
您可以使用insert。。。选择
语法:
ALTER TRIGGER [dbo].[POHeader_UPDATE]
ON [dbo].[POHeader]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[POHeaderLog]
([ActionDate]
,[Action]
,[POID]
,[CustomerName]
,[CustomerCode]
, ...)
SELECT
GETDATE()
,'Update'
,POID
,CustomerName
CustomerCode,
, ...
FROM inserted;
END
此查询不可能引发该错误。请向我们显示您的实际查询…该SQL中没有子查询,因此无法生成该错误。请使用实际查询编辑查询(我只修改了它的表名)。恐怕这就是我执行查询时遇到的错误。我也很惊讶@Helmi Fikri:是的,最有可能的是UPDATE
触发器的格式不正确,并引发您正在得到的错误。您需要检查该触发器的代码,并将其修复。@GMB已检查该触发器。我在问题中包括了触发器。在我看来,它的形式是好的,不应该停止大规模更新。请提供帮助。此查询不可能引发该错误。请向我们显示您的实际查询…该SQL中没有子查询,因此无法生成该错误。请使用实际查询编辑查询(我只修改了它的表名)。恐怕这就是我执行查询时遇到的错误。我也很惊讶@Helmi Fikri:是的,最有可能的是UPDATE
触发器的格式不正确,并引发您正在得到的错误。您需要检查该触发器的代码,并将其修复。@GMB已检查该触发器。我在问题中包括了触发器。在我看来,它的形式是好的,不应该停止大规模更新。请帮忙。非常感谢你的建议。它解决了我的大规模更新问题。非常感谢你的建议。它解决了我的大规模更新问题。
ALTER TRIGGER [dbo].[POHeader_UPDATE]
ON [dbo].[POHeader]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[POHeaderLog]
([ActionDate]
,[Action]
,[POID]
,[CustomerName]
,[CustomerCode]
, ...)
SELECT
GETDATE()
,'Update'
,POID
,CustomerName
CustomerCode,
, ...
FROM inserted;
END