Myt*_*hul 1 sql t-sql sql-server triggers
我想在SELECT执行删除查询时通过使用触发器删除a中的所有行而不删除最后返回的行.
此触发器不起作用,因此非常感谢任何帮助.
CREATE TRIGGER TR_StergereOfertaSpeciala
ON OferteSpeciale
INSTEAD OF DELETE
AS
DECLARE @nr INTEGER;
IF (EXISTS(SELECT * FROM DELETED))
BEGIN
SET @nr = (SELECT COUNT(*) FROM DELETED);
DELETE FROM (
SELECT TOP(@nr - 1)* FROM OferteSpeciale
INNER JOIN DELETED ON OferteSpeciale.codP = Deleted.codP
AND OferteSpeciale.codM = Deleted.codM
AND OferteSpeciale.dela = Deleted.dela)
END
Run Code Online (Sandbox Code Playgroud)
以下是让您的概念正常运行的示例:
CREATE TRIGGER TR_StergereOfertaSpeciala
ON OferteSpeciale
INSTEAD OF DELETE
AS BEGIN
DECLARE @nr INT
SET @nr = (SELECT COUNT(*) FROM DELETED)
IF (@nr > 1) BEGIN
DELETE o
FROM OferteSpeciale AS o
INNER JOIN (SELECT TOP (@nr - 1) * FROM DELETED /* ORDER BY ??? */) AS d
ON o.codP = d.codP
AND o.codM = d.codM
AND o.dela = d.dela
END
END
Run Code Online (Sandbox Code Playgroud)
请注意带连接的删除语法.另请注意,我们随意选择要保留的1行.我建议,正如@RBarryYoung所提到的那样,特别是通过某种方式对该集合进行排序,以了解我们要保留哪一行.
另一种可以避免某种动态TOP条款(聪明,BTW)的方法是专门排除你想要继续使用的记录NOT EXISTS/IN
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |