SQL Server:在插入后使用触发器插入行

3

我正在尝试使用触发器插入另一行到表中,但是出现以下错误信息:

如果语句包含未带INTO子句的OUTPUT子句,则DML语句的目标表'EDDSDBO.Redaction'不能有任何启用的触发器。

如何解决这个问题将不胜感激。

从阅读下面的链接来看,我的代码目前如下:

当表上存在触发器时无法使用UPDATE和OUTPUT子句

SQL Server Helper解决方法

代码:

ALTER TRIGGER [EDDSDBO].[AddLabel]
ON [EDDSDBO].[Redaction]
AFTER INSERT
AS
BEGIN
    DECLARE @T TABLE (
        [FileGuid] VARCHAR, [X] INT, [Y] INT, [Width] INT, [Height] INT
    )

    INSERT INTO [Redaction] [FileGuid],[X],[Y],[Width],[Height]
    OUTPUT [inserted].[FileGuid], [inserted].[X], [inserted].[Y],
           [inserted].[Width], [inserted].[Height]
    INTO @T
        SELECT
            [inserted].[FileGuid], [inserted].[X], [inserted].[Y], 70, 35
        FROM 
            inserted

    SELECT * 
    FROM @T
END
< p > 在阅读所描述的链接之前,INSERT 代码最初如下:

INSERT INTO [Redaction] 
    [FileGuid],[X],[Y],[Width],[Height]
SELECT TOP 1 
    [FileGuid], [X], [Y], 70, 35
FROM [Redaction] AS r1
ORDER BY [ID] DESC

更新: 事实证明,kCura的Relativity平台不允许使用触发器进行插入操作,因此这是徒劳的...

1个回答

2
由于您已经在触发器内部,因此触发器本身已经为其使用定义了Inserted伪表。
不能将其与需要OUTPUT子句的Inserted别名混合使用。
因此,在触发器内部的语句中不能使用OUTPUT子句。
此外: 触发器应该静默地完成他们的工作,而且不应该生成任何结果集! 更新: INSERT正确语法(可以轻松地在MSDN上找到...)是:
INSERT INTO [Redaction] ([FileGuid], [X], [Y], [Width], [Height])
    SELECT TOP 1 
        [FileGuid], [X], [Y], 70, 35
    FROM 
        [Redaction] AS r1
    ORDER BY 
        [ID] DESC

INSERT INTO行中,您需要在列的列表周围添加括号


好的,但是在使用OUTPUT之前的代码(我刚刚已经添加到问题中)也抛出了同样的错误,为什么会这样? - JChristen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接