2017-03-09 19 views
0

我知道類似的問題在這裏已經被問過很多次,但沒有人看到答案。我需要 - 特別是因爲我正在談論SQL和FileMaker之間的關係。當在FileMaker中添加記錄時,使用觸發器更新SQL中的記錄時,不能使用帶有INTO子句的OUTPUT子句

看,我實際上並沒有在我的觸發器中使用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 

的mslTitleCase功能已申報和作品,如果我是創建使用SQL查詢的記錄。 但在FileMaker中創建新記錄時可能會出錯。

有沒有人有任何提示找到一種方法來阻止FileMaker中的這個錯誤?

任何指導極大的讚賞。

謝謝

劉易斯

回答

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引用表的別名不是表名。對於名爲person的表,我認爲p是比x更好的別名。

+0

感謝您的幫助 - 我會更新我的觸發器以使用此最佳做法。 –

0

這聽起來像你的應用程序使用OUTPUT子句直接返回修改的數據。如果表有任何觸發器,則不允許。他們必須將修改後的數據輸出到表格中,然後從表格中選擇數據。

問題是本文中介紹: https://blogs.msdn.microsoft.com/sqlprogrammability/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults/

如果是這樣的話,你將無法觸發添加到表。數據的更正需要從外部來源進行。

+0

感謝您的幫助 –

相關問題