gpt4 book ai didi

sql - 有没有办法强制触发器在包含多行的更新语句上运行?

转载 作者:行者123 更新时间:2023-12-01 12:56:07 25 4
gpt4 key购买 nike

我不得不对触发器进行更改,并假设运行如下所示的更新查询会使触发器对所有匹配的行执行。但是,它只会更新找到的记录。

UPDATE someTable SET someField = someField WHERE someField = 'something';

作为快速解决方案,我创建了以下查询,使用游标循环遍历记录并更新每一行。它有效,幸运的是我没有非常大的数据集,所以它不会花太长时间,但它似乎不是最好的解决方案。

DECLARE @id INT;
DECLARE queryCursor CURSOR FOR
SELECT id FROM someTable WHERE someField='something'

OPEN queryCursor
FETCH NEXT FROM queryCursor INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE someTable SET someField = someField WHERE id = @id
FETCH NEXT FROM queryCursor INTO @id
END

CLOSE queryCursor
DEALLOCATE queryCursor

有没有更好的方法让触发器在 SQL Server 中的多行上执行?

编辑:来自触发器的代码

FOR INSERT, UPDATE
AS
IF UPDATE (LineNumber)
OR UPDATE(LineService)

Begin

DECLARE @CDL VARCHAR(50)
DECLARE @LN VARCHAR(100)
DECLARE @A VARCHAR(25)

SELECT @CDL = CommonDataLink FROM INSERTED
SELECT @A = LineService FROM INSERTED

SET @LN = @CDL + @A

UPDATE CommonData SET ReportedLineNo = @LN WHERE CommonDataLink = @CDL

End

最佳答案

您必须使用特殊表 INSERTED 来满足您的需求:

更新代码

FOR INSERT, UPDATE
AS
IF UPDATE (LineNumber)
OR UPDATE(LineService)

Begin

DECLARE @CDL VARCHAR(50)
DECLARE @LN VARCHAR(100)
DECLARE @A VARCHAR(25)

SELECT @CDL = CommonDataLink FROM INSERTED
SELECT @A = LineService FROM INSERTED

SET @LN = @CDL + @A

UPDATE A
SET ReportedLineNo = B.LineService + B.CommonDataLink
FROM CommonData A
INNER JOIN INSERTED B
ON A.CommonDataLink = B.CommonDataLink


End

关于sql - 有没有办法强制触发器在包含多行的更新语句上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com