我知道有一个类似的问题在这里已被问过几次,但似乎没有人给我我需要的答案 - 特别是因为我在讨论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中停止此错误的方法?
非常感谢任何指导。
谢谢
路易斯
答案 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子句直接返回修改后的数据。如果表有任何触发器,则不允许这样做。他们必须将修改后的数据输出到表中,然后从表中选择数据。
如果是这种情况,您将无法向表中添加触发器。对数据的更正需要从外部来源进行。