在FileMaker中添加记录时,使用触发器更新SQL中的记录时,不能将OUTPUT子句与INTO子句一起使用

时间:2017-03-09 15:01:52

标签: sql sql-server filemaker

我知道有一个类似的问题在这里已被问过几次,但似乎没有人给我我需要的答案 - 特别是因为我在讨论SQL和FileMaker之间的关系。

请参阅我的Trigger中实际上根本没有使用OUTPUT子句!但FileMaker似乎要么认为我是,要么将其自身作为OUTPUT子句插入,我无法看到。

以下是一个示例触发器:

CREATE TRIGGER [dbo].[TRG_person__name] 
   ON  [dbo].[person] 
   AFTER INSERT,UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

IF  UPDATE ( person_name_first ) 
    BEGIN

        UPDATE person
        SET person_name_first = dbo.mslTitleCase ( i.person_name_first )
        FROM person AS x
        JOIN inserted AS i ON x._pk_person = i._pk_person
        WHERE x._pk_person = i._pk_person

    END
--END IF


END

如果我要使用SQL查询创建记录,则已声明并运行mslTitleCase函数。 但是在FileMaker中创建新记录时我会出错。

有没有人有任何提示可以找到在FileMaker中停止此错误的方法?

非常感谢任何指导。

谢谢

路易斯

3 个答案:

答案 0 :(得分:1)

您可能还有其他问题,但update的正确语法是:

    UPDATE p
        SET person_name_first = dbo.mslTitleCase ( i.person_name_first )
    FROM person p JOIN
         inserted i
         ON p._pk_person = i._pk_person
    WHERE p._pk_person = i._pk_person;

重要的变化是update引用表别名而不是表名。对于名为p的表,我认为x是一个比person更好的别名。

答案 1 :(得分:1)

答案 2 :(得分:0)

听起来您的应用程序正在使用OUTPUT子句直接返回修改后的数据。如果表有任何触发器,则不允许这样做。他们必须将修改后的数据输出到表中,然后从表中选择数据。

本文介绍了该问题: https://blogs.msdn.microsoft.com/sqlprogrammability/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults/

如果是这种情况,您将无法向表中添加触发器。对数据的更正需要从外部来源进行。