在FileMaker中添加记录时,在SQL中使用触发器更新记录时,无法使用OUTPUT子句with INTO子句
我知道类似的问题在这里已经被问了好几次了,但似乎没有人能给我我需要的答案——特别是因为我在谈论SQL和FileMaker之间的关系 看,我实际上根本没有在触发器中使用OUTPUT子句!但FileMaker似乎要么认为我是,要么将自己看不见的东西作为输出子句插入 下面是一个触发器示例:在FileMaker中添加记录时,在SQL中使用触发器更新记录时,无法使用OUTPUT子句with INTO子句,sql,sql-server,filemaker,Sql,Sql Server,Filemaker,我知道类似的问题在这里已经被问了好几次了,但似乎没有人能给我我需要的答案——特别是因为我在谈论SQL和FileMaker之间的关系 看,我实际上根本没有在触发器中使用OUTPUT子句!但FileMaker似乎要么认为我是,要么将自己看不见的东西作为输出子句插入 下面是一个触发器示例: CREATE TRIGGER [dbo].[TRG_person__name] ON [dbo].[person] AFTER INSERT,UPDATE AS BEGIN -- SET
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中的此错误
非常感谢您的指导
多谢各位
Lewis您可能还有其他问题,但是
更新的正确语法是:
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;
重要的更改是,更新
引用的是表别名,而不是表名。我认为对于名为person
的表,p
是比x
好得多的别名,您可能还有其他问题,但是更新的正确语法是:
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;
重要的更改是,更新
引用的是表别名,而不是表名。我认为对于名为person
的表,p
是比x
好得多的别名。听起来您的应用程序正在使用OUTPUT子句直接返回修改后的数据。如果表有任何触发器,则不允许这样做。他们必须将修改后的数据输出到表中,然后从表中选择数据
本条涵盖了这一问题:
如果是这种情况,您将无法向表中添加触发器。对数据的更正需要从外部源进行。听起来您的应用程序正在使用OUTPUT子句直接返回修改后的数据。如果表有任何触发器,则不允许这样做。他们必须将修改后的数据输出到表中,然后从表中选择数据
本条涵盖了这一问题:
如果是这种情况,您将无法向表中添加触发器。需要从外部来源对数据进行更正。这被报告为错误:
它看起来没有被解决。这被报告为一个错误:
看起来问题还没有解决。谢谢Nicolai-也许我的电子邮件太模糊了!看起来我必须找到另一种方法来进行插入,但更新效果很好。谢谢Nicolai-也许我的电子邮件太模糊了!看起来我必须找到另一种方法来执行插入操作,但更新只适用于良好的触发器。感谢您的帮助-我将更新触发器以使用此最佳实践。感谢您的帮助-我将更新触发器以使用此最佳实践。