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

Cannot use OUTPUT clause with INTO clause when using Triggers to update records in SQL, when adding a record in FileMaker

我知道类似的问题在这里已经被问过好几次了,但是 none 似乎给了我我需要的答案——特别是因为我在谈论 [=29= 之间的关系] 和 FileMaker。

看,我实际上根本没有在我的触发器中使用 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 中阻止此错误的方法?

非常感谢任何指导。

谢谢

刘易斯

您可能还有其他问题,但 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 引用 table 别名 而不是 table 名称.我认为对于名为 person.

的 table,p 是比 x 更好的别名

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

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

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

这已被报告为错误:http://help.filemaker.com/app/answers/detail/a_id/7870/~/external-sql-data-sources-(ess)%3A-unable-to-write-to-a-table-with-triggers-on

看起来好像没有解决。