在 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 的数据。
如果是这种情况,您将无法向 table 添加触发器。需要从外部来源更正数据。
看起来好像没有解决。
我知道类似的问题在这里已经被问过好几次了,但是 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
.
p
是比 x
更好的别名
听起来您的应用程序正在使用 OUTPUT 子句直接 return 修改后的数据。如果 table 有任何触发器,则不允许这样做。他们必须将修改后的数据输出到 table,然后 select 来自 table 的数据。
如果是这种情况,您将无法向 table 添加触发器。需要从外部来源更正数据。
看起来好像没有解决。